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.