LC_ALL=C 已设置,不知道为什么

LC_ALL=C 已设置,不知道为什么

我正在使用 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

据我理解,这意味着,写入的所有内容"..."都是隐式设置的,因此唯一明确设置的语言环境是LANGLC_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_ALLLC_CTYPE解析LANG后的值也显示为locale charmap。据我所知,您有LC_CTYPE=C,但不确定您的LC_ALL。这些应该包含 UTF-8 语言环境,而不是 C。

“为什么我的旧系统上设置了区域设置” – 问题应该是:为什么新系统上没有设置区域设置?不幸的是,我无法回答这个问题,但它们应该设置。

相关内容