Domanda
Come si fa a trovare nomi di locale validi?
Attualmente sto usando MAC OS X.
Ma le informazioni su altre piattaforme potrebbe anche essere utile.
#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
Soluzione
La chiamata al costruttore std :: locale ( "") crea un oggetto locale che rappresenta preferenze dell'utente. La norma non dice che cosa questo significa, ma su molti sistemi sostituti biblioteche tutto ciò si trova in una variabile d'ambiente (spesso LANG
o LC_ALL
) al posto della stringa vuota. Un nome comune per la locale americano, per esempio, è "en_US". (Sui sistemi POSIX è possibile digitare locale -a
per elencare i nomi dei locali supportate.)
locale -a
dovrebbe funzionare per voi.
Se vuoi dire programatically dalla std libary C ++ non sono sicuro.
Questo stack overflow di domanda è probabilmente, anche rilevanti, ma non sembra avere molta risposta avuto.
Modifica
Per usare UTF-16 che probabilmente sarà necessario utilizzare libiconv come indicato nel questa domanda .