我想检查一下我的系统是zh_TW.UTF-8
还是zh_CN.UTF-8
。
使用以下代码,我可以说它是UTF-8
。
但是,如何判断它是zh_TW
还是zh_CN
?
#include <langinfo.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
//setlocale(LC_CTYPE,"");
setlocale(LC_ALL,"");
printf("%s\n",nl_langinfo(CODESET));
printf("%s\n",nl_langinfo(CRNCYSTR));
exit(EXIT_SUCCESS);
}
答案 0 :(得分:2)
在类似POSIX的系统上,有一种简单的方法:尝试locale
命令:
system("locale");
或
FILE *handle = popen("locale", "r+");
size_t readn;
char buf[128];
while ((readn = fread(buf, 1, 128, handle)) > 0) {
fwrite(buf, 1, readn, stdout);
}
pclose(handle);
答案 1 :(得分:1)
答案 2 :(得分:0)
函数setlocale()
返回指向包含区域设置信息的字符串的指针。您可以复制它(但不能修改它,随后对setlocale()
的调用可能会覆盖以前的值)。该字符串可用于将来再次设置区域设置。
char *loc_str = setlocale(LC_ALL, "");
if (loc_str == 0)
...failed to set locale...
printf("LC_ALL = %s\n", loc_str);
如果您设置了一个类别,则会返回一个字符串,以便您恢复该类别。您可以查看LC_COLLATE
并查看设置内容:
char *loc_str = setlocale(LC_COLLATE, "");
if (loc_str == 0)
...failed to set locale...
printf("LC_COLLATE = %s\n", loc_str);
等
它可能会或可能不会给你一个人类可读的价值 - 但至少要试验一下它的用途。
您还可以查看LANG
环境变量或LC_*
环境变量。