首先:虽然我可以理解 LC_TIME、LC_NUMERIC 和大多数其他 LC_* 变量的地理区域详细信息的相关性,但我不太明白 'en_AU' 与 LC_CTYPE 有何关系......
不是 UTF-8 (并且其他编码)本身就有足够的定义(对于 LC_CTYPE),如和编码根据定义是一致的吗?...
在我写的时候想想,可能世界上不同地区的小写字母大写不同......如果是这样的话,如何iconv
处理这个问题?......
这iconv
一点实际上是我开始写这行的原因我想,因为它不要求区域设置,它只要求输入编码格式。
我的下一个难题是:输出中的行项目指locale LC_CTYPE
的是什么,和/或哪里是获得布局的好地方...也许更相关的问题是:此信息将由谁以及在哪里提供需要吗? ..
我很确定我不需要它...但这一切都有助于填写“脚本”、“编码”和“区域设置”的图片;令人惊讶的是不平凡的一旦你离开ASCII 世界。
答案1
所有区域变量都使用相同的区域名称,这样您就可以一键指定您喜欢的区域,例如LANG=en_AU.utf8
。正如您所猜测的,国家/地区信息有时甚至在 中也是相关的LC_CTYPE
,例如 的大写版本在大多数语言中i
是,但在土耳其语中() 。但不要期待奇迹;例如,小写字母与大写字母的对应关系是一一对应的,因此 中没有好的大写版本(应该是)。I
İ
tr_TR.utf8
ß
de_DE.iso8859-1
SS
您将可以更轻松地理解 的输出locale -k LC_CTYPE
,-k
除了值之外还可以查看关键字名称(如果没有-k
,输出格式的设计是为了让您可以获得特定关键字的值,例如locale ctype-width
)。关键字列表及其含义取决于系统,就像区域设置数据的存储方式一样,并且很多人对此不感兴趣,因此您可能在 C 库源代码之外找不到太多文档。到目前为止,locale 命令最有用的形式是locale -a
列出可用的区域设置名称。
为了GNU 库(即非嵌入式Linux):
- 除消息之外的所有区域设置数据都存储在
/usr/lib/locale/locale-archive
.该文件是由生成的localedef
来自/usr/share/i18n
和中的数据/usr/local/share/i18n
。我认为,语言环境定义文件的格式/usr/share/i18n/locales
仅记录在源代码中。 - 中的字符集和编码定义文件的格式
/usr/share/i18n/charmaps
为由 POSIX:2001 标准化。这些文件(或者,在GNU 库, ) 中的编译版本/usr/lib/locale/locale-archive
由图标 编程和命令行设施。编码转换也依赖于/usr/lib/gconv/*.so
. Gnu libc 手册文档如何编写自己的 gconv 模块,尽管该部分包含文本“此信息应该足以编写新模块。任何这样做的人都应该看看 GNU C 库源代码中的可用源代码。” - 消息目录得到特殊对待,因为每个应用程序都有自己的集合。消息目录位于
/usr/share/locale/*/LC_MESSAGES
.手册包含应用程序编写者的文档。 GNU libc 支持POSIX接口catgets
以及更强大的获取文本接口。
书面语言确实非常复杂,即使你与英语相差不远。法语和德语是ü
同一个字符吗(是“特雷马”与“元音变音”,法国和德国的打印机以稍微不同的高度排版重音是否重要)?i
(İ
土耳其语)的大写字母是什么?如果您只有 ASCII(在德语中是),是否会Ö
音译为?字典中的排序位置(在瑞典语中,位于 后面)?这只是用拉丁字母书写的欧洲语言的几个例子!这O
OE
Ä
Z
统一码邮件列表有很多例子,有时还对这些话题进行了激烈的讨论。