rasgos niño lista ejemplos caracter c++ c locale

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.