字符在终端 (st) 中无法正确显示

字符在终端 (st) 中无法正确显示

当在终端中输入德语变音符号 ( ä, ö, ) 时(我在 Arch Linux 上使用 st, is ),它仅显示。区域设置似乎设置正确。ü$XTERMst-256color<ffffffff>

的输出locale

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=de-DE.UTF-8
LC_CTYPE=de-DE.UTF-8
LC_NUMERIC="de-DE.UTF-8"
LC_TIME="de-DE.UTF-8"
LC_COLLATE="de-DE.UTF-8"
LC_MONETARY="de-DE.UTF-8"
LC_MESSAGES="de-DE.UTF-8"
LC_PAPER="de-DE.UTF-8"
LC_NAME="de-DE.UTF-8"
LC_ADDRESS="de-DE.UTF-8"
LC_TELEPHONE="de-DE.UTF-8"
LC_MEASUREMENT="de-DE.UTF-8"
LC_IDENTIFICATION="de-DE.UTF-8"
LC_ALL=

locale.conf我只设置

LANG="de-DE.UTF-8"
LC_CTYPE="de-DE.UTF-8"

locale.gen我没有评论de-DE.UTF-8。哪里可能出错呢?

答案1

实际的语言环境名称有一个下划线语言代码和国家代码之间,即你locale.conf应该是:

LANG="de_DE.UTF-8"
LC_CTYPE="de_DE.UTF-8"

目前,您使用减号 ( -) 而不是下划线 ( _)。由于您的区域设置规范无效,系统将仅回退到 POSIX 区域设置和 US-ASCII 字符集。

LANG变量设置所有其他语言环境的默认值,因此只需设置

LANG=de_DE.UTF-8

相当于将所有特定于类别的LC_*区域设置变量设置为相同的值,除非您使用任何LC_*变量覆盖特定类别。

因此,如果您设置LANG=de_DE.UTF-8,则不需要,LC_CTYPE=de_DE.UTF-8因为设置LANG已经将其设置为 的新默认值LC_CTYPE。但是,如果您不喜欢翻译的错误消息并希望将其保留为英文,则可能需要设置为LC_MESSAGES=en_US.UTF-8仅覆盖 LC_MESSAGES 类别的 LANG 值。

命令的输出locale也反映了这一点:它显示所有类别特定变量设置为与当前LANG设置相同(不正确)的值。

LC_ALL是所有区域设置的主覆盖:您最常在某些正在解析可能受本地化影响的命令输出的管道中看到它。在此类管道上添加前缀LC_ALL=POSIXLC_ALL=en_US.UTF-8保证脚本编写者只需要为该特定语言环境设计输出解析,无论用户使用哪种语言环境。

相关内容