LC_IDENTIFICATION并没有告诉你太多:
LC_IDENTIFICATION - 这不是用户可见的类别,它包含有关区域设置本身的信息,并且对用户或开发人员很少有用(但为了完整性而在此处列出)。
您必须查看完整的文件集。
似乎没有标准的命令行实用程序可以执行此操作,但有一个运行时调用(比原始语言环境函数稍晚添加)。这是一个示例程序,说明了该功能nl_langinfo
:
#include <stdio.h>
#include <locale.h>
#include <langinfo.h>
int
main(int argc, char **argv)
{
int n;
for (n = 1; n < argc; ++n) {
if (setlocale(LC_ALL, argv[n]) != 0) {
char *code = nl_langinfo(CODESET);
if (code != 0)
printf("%s ->%s\n", argv[n], code);
else
printf("?%s (nl_langinfo)\n", argv[n]);
} else {
printf("? %s (setlocale)\n", argv[n]);
}
}
return 0;
}
和一些输出,例如foo $(locale -a)
:
aa_DJ ->ISO-8859-1
aa_DJ.iso88591 ->ISO-8859-1
aa_DJ.utf8 ->UTF-8
aa_ER ->UTF-8
aa_ER@saaho ->UTF-8
aa_ER.utf8 ->UTF-8
aa_ER.utf8@saaho ->UTF-8
aa_ET ->UTF-8
aa_ET.utf8 ->UTF-8
af_ZA ->ISO-8859-1
af_ZA.iso88591 ->ISO-8859-1
af_ZA.utf8 ->UTF-8
am_ET ->UTF-8
am_ET.utf8 ->UTF-8
an_ES ->ISO-8859-15
an_ES.iso885915 ->ISO-8859-15
an_ES.utf8 ->UTF-8
ar_AE ->ISO-8859-6
ar_AE.iso88596 ->ISO-8859-6
ar_AE.utf8 ->UTF-8
ar_BH ->ISO-8859-6
ar_BH.iso88596 ->ISO-8859-6
您引用的目录名称通常(但不是必需)与编码名称。这是示例程序中所做的假设。有一个相关的问题如何获取终端的字符编码,但它没有有用的答案。但其中一个很有趣,因为它断言
locale charmap
将给出区域设置编码。根据标准,情况不一定如此:
像往常一样,实现可能(或可能不)以不同的方式处理未指定的功能。 GNU C 库的文档在某些方面与标准不同(请参阅locale and localedef),但没有提供显示代码集名称的明确选项。