我想检查我的系统是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);
}发布于 2012-03-05 13:43:16
发布于 2012-03-05 13:29:20
在类似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);发布于 2012-03-05 13:44:21
函数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_*环境变量。
https://stackoverflow.com/questions/9561937
复制相似问题