我曾经在让 zsh 与 Debian Jessie 很好地配合使用时遇到过很多麻烦,我得出的结论是,我的问题都源于我的系统语言环境。运行locale
,我明白了
LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=
但是/etc/default/locale
包含的LANG=en_US.UTF-8
内容为/etc/environment
,并且我的/etc/locale.gen
文件只有en_US.UTF-8 UTF-8
未注释的部分。
- 为什么
locale
报告的内容与我的系统上其他选项略有不同, - 我该如何配置(修复)以便在运行时为每个 LC 选项提供“en_US.UTF-8”
locale
?
答案1
正确的名字是UTF-8
。然而,Linuxglibc将在内部规范化编码名称,通过将其转换为小写并删除大多数特殊字符,因此两种变体都可以工作(只要它们不会逃逸到 BSD 系统)。
大多数情况下,.utf8
$LANG 中的后缀来自 GNOME;据我所知,这个问题已在 3.18 中修复。
但如上所述,utf8
和UTF-8
在 Linux glibc 上的工作方式相同——问题出在其他地方。由于你没有写出问题是什么是,以下是一份常规清单:
locale -a
(可用语言环境)是否显示任一变体完全没有?即你有生成编辑 locale.gen 之后的locale-gen
语言环境?是否终端仿真器的环境是否具有相同的区域设置?用于
cat /proc/$(pidof xterm)/environ | tr \\0 \\n
检查另一个进程的环境。(人们经常尝试从他们自己的
~/.bashrc
文件或类似的文件中设置语言环境变量,但是环境变量不会“向上”传播,所以最终结果是。)输出是什么
printf '\xe2\x99\xa5'
?如果显示一框或问号,表示字体没有所需的字符。如果显示三垃圾字符,这意味着您的终端没有正确的 $LANG(或者只是不支持 UTF-8)。