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

Con*_*ser 19 locale environment-variables 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=
Run Code Online (Sandbox Code Playgroud)

但是/etc/default/locale包含LANG=en_US.UTF-8as do /etc/environment,而我的/etc/locale.gen文件只有未en_US.UTF-8 UTF-8注释。

  1. 为什么locale报告的内容(微妙地)与我系统上看似所有其他选项不同,并且
  2. 当我运行时,如何配置(修复)为每个 LC 选项提供“en_US.UTF-8”的东西locale

use*_*686 19

“正确的”名称是UTF-8. 但是,Linux glibc会在内部规范化编码名称,将其转换为小写并删除大多数特殊字符,因此两种变体都可以使用(只要它们不转义到 BSD 系统)。

大多数情况下.utf8,$LANG 中的后缀来自 GNOME;afaik,这已在 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)。