首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查C语言中的语言环境

问检查C语言中的语言环境
EN

Stack Overflow用户
提问于 2012-03-05 13:14:34
回答 3查看 902关注 0票数 0

我想检查我的系统是zh_TW.UTF-8还是zh_CN.UTF-8。

使用下面的代码,我可以断定它是UTF-8。但是,我怎么知道是zh_TW还是zh_CN呢?

代码语言:javascript
复制
#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);
}
EN

回答 3

Stack Overflow用户

发布于 2012-03-05 13:43:16

尝试:

代码语言:javascript
复制
printf("%s\n", setlocale(LC_ALL, ""));

还有,请阅读this。

票数 2
EN

Stack Overflow用户

发布于 2012-03-05 13:29:20

在类似POSIX的系统上,有一种简单的方法:尝试使用locale命令:

代码语言:javascript
复制
system("locale");

或

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-03-05 13:44:21

函数setlocale()返回一个指向包含区域设置信息的字符串的指针。您可以复制它(但不能修改它,后续对setlocale()的调用可能会覆盖以前的值)。该字符串可用于将来再次设置区域设置。

代码语言:javascript
复制
char *loc_str = setlocale(LC_ALL, "");

if (loc_str == 0)
    ...failed to set locale...
printf("LC_ALL = %s\n", loc_str);

如果您设置了一个类别,您将得到一个允许您恢复该类别的字符串。您可以查看LC_COLLATE,看看设置了什么:

代码语言:javascript
复制
char *loc_str = setlocale(LC_COLLATE, "");
if (loc_str == 0)
    ...failed to set locale...
printf("LC_COLLATE = %s\n", loc_str);

等。

它可能会也可能不会给你一个人类可读的值-但至少要试验一下它在使用什么。

您还可以查看LANG环境变量或LC_*环境变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9561937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档