曾尝试在Linux中使用以下代码,但始终在不同的LANG
设置下返回"C" .
#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
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能在Linux中获得当前的语言环境设置(比如Ubuntu)?
另一个问题是,在Windows中获取区域设置的方式是否相同?
Die*_*Epp 24
来自man 3 setlocale
(新格言:"如有疑问,请阅读整个联机帮助页."):
如果是
""
locale,则应根据环境变量设置应修改的语言环境的每个部分.
因此,我们可以通过setlocale
在程序开头调用来读取环境变量,如下所示:
#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;
}
Run Code Online (Sandbox Code Playgroud)
我的系统不支持zh_CN
语言环境,如下面的输出显示:
$ ./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:我不知道Windows语言环境.我建议从MSDN搜索开始,如果仍有问题,请打开单独的 Stack Overflow问题.
Deq*_*ing 19
刚刚弄清楚如何通过C++获取语言环境,只需使用空字符串""来构造std :: locale,它与setlocale(LC_ALL,"")的作用相同.
locale l("");
cout<<"Locale by C++: "<<l.name()<<endl;
Run Code Online (Sandbox Code Playgroud)
此链接描述了C语言环境和C++语言环境之间的细节差异.
归档时间: |
|
查看次数: |
30573 次 |
最近记录: |