2009-12-17 18 views
19

Come si trovano i nomi delle impostazioni internazionali valide?Nome locale valido

Attualmente sto usando MAC OS X.
Ma anche le informazioni su altre piattaforme sarebbero utili.

#include <fstream> 
#include <iostream> 


int main(int argc,char* argv[]) 
{ 
    try 
    { 
     std::wifstream data; 
     data.imbue(std::locale("en_US.UTF-16")); 
     data.open("Plop"); 
    } 
    catch(std::exception const& e) 
    { 
     std::cout << "Exception: " << e.what() << "\n"; 
     throw; 
    } 
} 

% g++ main.cpp 
% ./a.out 
Exception: locale::facet::_S_create_c_locale name not valid 
Abort 
+0

Martin Ho corretto dove era stato digitato Local per Locale. Immagino che probabilmente lo sai, ma sono diversi, e se stavi scrivendo quello sbagliato avrebbe potuto ferire la tua ricerca su google –

risposta

17

This page says:

la chiamata al costruttore std :: locale ("") crea un oggetto locale che rappresenta preferenze dell'utente. Lo standard non dice cosa significa, ma su molti sistemi la libreria sostituisce qualunque cosa si trovi in ​​una variabile di ambiente (spesso LANG o LC_ALL) al posto della stringa vuota. Un nome comune per la locale americana, ad esempio, è "en_US". (Sui sistemi POSIX è possibile digitare locale -a per elencare i nomi dei locali supportate.)

locale -a dovrebbe funzionare per voi.

Se si intende in modo programmatico dalla libreria std C++, non sono sicuro.

This stack overflow question è probabilmente anche rilevante, ma non sembra aver avuto molta risposta.

Modifica

Per utilizzare UTF-16 che probabilmente sarà necessario utilizzare libiconv di cui al this question.

+0

Che funzionava: ho en_US.UTF-8 e en_GB.UTF-8. Ma ora ho bisogno di decodificare un file UTF-16. –

+0

OK, ho esteso la risposta per questo. libiconv è la risposta breve che penso. –

Problemi correlati