en_US.utf8 和 en_US.UTF-8 之间的区别?

en_US.utf8 和 en_US.UTF-8 之间的区别?

我曾经在让 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未注释的部分。

  1. 为什么locale报告的内容与我的系统上其他选项略有不同,
  2. 我该如何配置(修复)以便在运行时为每个 LC 选项提供“en_US.UTF-8” locale

答案1

正确的名字是UTF-8。然而,Linuxglibc将在内部规范化编码名称,通过将其转换为小写并删除大多数特殊字符,因此两种变体都可以工作(只要它们不会逃逸到 BSD 系统)。

大多数情况下,.utf8$LANG 中的后缀来自 GNOME;据我所知,这个问题已在 3.18 中修复。

但如上所述,utf8UTF-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)。

相关内容