检查C中的语言环境语言

时间:2012-03-05 05:14:34

标签: c locale

我想检查一下我的系统是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);
}

3 个答案:

答案 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)

尝试:

printf("%s\n", setlocale(LC_ALL, ""));

并阅读this

答案 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_*环境变量。