c++ - lista - rasgos de caracter de un niño
¿Cómo obtener la localización actual de mi entorno? (3)
Intenté seguir el código en Linux, pero siempre devuelve ''C'' bajo diferentes configuraciones de LANG .
#include <iostream>
#include <locale.h>
#include <locale>
using namespace std;
int main()
{
cout<<"locale 1: "<<setlocale(LC_ALL, NULL)<<endl;
cout<<"locale 2: "<<setlocale(LC_CTYPE, NULL)<<endl;
locale l;
cout<<"locale 3: "<<l.name()<<endl;
}
$ ./a.out
locale 1: C
locale 2: C
locale 3: C
$
$ export LANG=zh_CN.UTF-8
$ ./a.out
locale 1: C
locale 2: C
locale 3: C
¿Qué debo hacer para obtener la configuración regional actual en Linux (como Ubuntu)?
Otra pregunta es, ¿es la misma forma de obtener la configuración regional en Windows?
De man 3 setlocale (Nueva máxima: "En caso de duda, lea la página del manual completa"):
Si la configuración regional es
"", cada parte de la configuración regional que se debe modificar se establece de acuerdo con las variables de entorno.
Entonces, podemos leer las variables de entorno llamando a setlocale al comienzo del programa, de la siguiente manera:
#include <iostream>
#include <locale.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "");
cout << "LC_ALL: " << setlocale(LC_ALL, NULL) << endl;
cout << "LC_CTYPE: " << setlocale(LC_CTYPE, NULL) << endl;
return 0;
}
Mi sistema no admite la zh_CN regional zh_CN , como lo revela la siguiente salida:
$ ./a.out LC_ALL: en_US.utf8 LC_CTYPE: en_US.utf8 $ export LANG=zh_CN.UTF-8 $ ./a.out LC_ALL: C LC_CTYPE: C
Windows: No tengo idea acerca de las configuraciones regionales de Windows. Sugiero comenzar con una búsqueda de MSDN y luego abrir una pregunta separada de Desbordamiento de pila si aún tiene preguntas.
Simplemente descubrí cómo obtener la configuración regional mediante C ++, simplemente usa una cadena vacía "" para construir std :: locale, que hace lo mismo que setlocale (LC_ALL, "").
locale l("");
cout<<"Locale by C++: "<<l.name()<<endl;
Este link describe las diferencias en los detalles entre la configuración regional C y la configuración regional C ++.
Una buena alternativa a considerar en lugar de std :: locale es boost :: locale, que es capaz de devolver información más confiable - vea http://www.boost.org/doc/libs/1_52_0/libs/locale/doc/html/locale_information.html
boost :: locale :: info tiene las siguientes funciones de miembro:
std::string name() -- the full name of the locale, for example en_US.UTF-8
std::string language() -- the ISO-639 language code of the current locale, for example "en".
std::string country() -- the ISO-3199 country code of the current locale, for example "US".
std::string variant() -- the variant of current locale, for example "euro".
std::string encoding() -- the encoding used for char based strings, for example "UTF-8"
bool utf8() -- a fast way to check whether the encoding is UTF-8.