我正在使用 st,即简单终端或 suckless 终端,它是一个支持 Unicode 的终端。
我有两台机器,都运行 Arch Linux,系统设置基本相同,但我只在旧机器上获得 Unicode 支持!
经过一番调查,我认为这与我的所在地有关,但我并不完全确定。
locale
给出:
[tim@x1carbon: ~]$ locale
LANG=en_DE.UTF-8
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C
据我理解,这意味着,写入的所有内容"..."
都是隐式设置的,因此唯一明确设置的语言环境是LANG
和LC_ALL
。
我已LANG=de_DE.UTF-8
入定/etc/locale.conf
。
[tim@x1carbon: ~]$ cat /etc/locale.conf
LANG=de_DE.UTF-8
LC_COLLATE=C
LANGUAGE=en_US.UTF-8
但是我根本不记得设置LC_ALL
(在我的旧机器上,当我运行时该变量是空的locale
)!
我运行了sudo grep -rnw '/usr/' -e 'LC_.*=C'
(查看/usr/
目录中每个文件的搜索模式),它输出了很多包含的脚本和文件LC_ALL=C
,但在大多数情况下,我猜测现有程序只是读取我设置的LC_ALL
变量并将匹配的变量添加到它们的脚本中。
我找不到我实际设置此变量的位置,我的理解可能有误,这就是错误渲染的原因,但仍然:LC_ALL
我认为设置为错误的语言环境可能会导致很多其他问题。
此外,还localectl status
提出:
[tim@x1carbon: ~]$ localectl status
System Locale: LANG=de_DE.UTF-8
LANGUAGE=en_US.UTF-8
LC_COLLATE=C
VC Keymap: de-latin1
X11 Layout: n/a
...这与工作机器上的输出相同。
我已经将 -command 的输出通过管道传输grep
到一个日志文件,并且我可以将该文件上传到某个地方,但我不知道如何正确地执行此操作,因为我目前还没有理由这样做。
答案1
因此,在 Archlinux 论坛上开了一个帖子后,有人指出,我可能LC_ALL=C
在 Home 目录中的某个文件中进行了设置。运行后,grep -rnw '/home/' -e 'LC_.*=C'
我发现在我的 .bashrc 中有一行内容
export LC_ALL=C
我删除了它。重启后,运行后locale
会给出en_DE.UTF-8
大多数语言环境,这更令人困惑。但在我查看区域设置(使用 KDE 作为我的桌面)后,我发现我的“格式”设置被设置为 en_DE。删除它,重启后,现在一切都按预期运行。
答案2
“这可能是问题所在吗?” – 是的。
大多数应用程序都采用 或 (此列表中第一个非空的)的编码LC_ALL
。LC_CTYPE
解析LANG
后的值也显示为locale charmap
。据我所知,您有LC_CTYPE=C
,但不确定您的LC_ALL
。这些应该包含 UTF-8 语言环境,而不是 C。
“为什么我的旧系统上设置了区域设置” – 问题应该是:为什么新系统上没有设置区域设置?不幸的是,我无法回答这个问题,但它们应该设置。