2009-12-17 12 views
19

¿Cómo se encuentran los nombres de configuración regional válidos?Nombres de configuración regional válidos

Actualmente estoy usando MAC OS X.
Pero la información sobre otras plataformas también sería útil.

#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 He reparado el lugar donde había tipeado Local for Locale. Supongo que probablemente sepas esto, pero son diferentes, y si estuvieras escribiendo el incorrecto, podría haber dañado tu Google –

Respuesta

17

This page says:

La llamada al constructor std :: locale ("") crea un objeto de configuración regional que representa las preferencias del usuario. La norma no dice lo que esto significa, pero en muchos sistemas la biblioteca sustituye lo que se encuentra en una variable de entorno (a menudo LANG o LC_ALL) en lugar de la cadena vacía. Un nombre común para la configuración regional estadounidense, por ejemplo, es "en_US". (En sistemas POSIX puede escribir locale -a a la lista los nombres de los entornos locales soportados.)

locale -a debe trabajar para usted.

Si quieres decir programáticamente de C++ std libary no estoy seguro.

This stack overflow question es probablemente también relevante, pero no parece haber tenido mucha respuesta.

Editar

Para utilizar UTF-16 es probable que tendrá que utilizar libiconv como se menciona en this question.

+0

. Eso funcionó: tengo en_US.UTF-8 y en_GB.UTF-8. Pero ahora necesito decodificar un archivo UTF-16. –

+0

OK, he extendido la respuesta para eso. libiconv es la respuesta corta, creo. –

Cuestiones relacionadas