我有一台装有 Linux Mint Debian Edition 2“Betsy”(作为 RC 安装,应用了所有可用更新)和 MATE 桌面环境的计算机。我的问题是,在某些应用程序中,我的母语(波兰语)使用的特殊字符,并且,因为我有一些包含的文件夹和文件未正确处理。
更具体地说:在 mate-terminal、pluma(MATE 文本编辑器)和 caja(文件管理器)以及可能还有其他一些我只是碰巧没有检查过的地方,通常由 Alt+letter 输入的任何波兰语特殊字符都会被忽略(没有打印字符——在pluma和caja中)或用问号替换(在mate-terminal中)。即使是 vim,当在 mate-terminal 中运行时,也会以这种方式运行,即用问号替换特殊字符。
我不认为这是一个系统范围的问题。为什么?因为当我切换到另一个 tty 并尝试在终端中输入这些特殊字符时,我没有遇到任何问题。 mate-terminal 显示的文件夹与zdj?cia
另一个 tty 中显示的文件夹是正确标记的zdjęcia
。看起来问题似乎是 MATE 特定的,因为 vim 在终止符中运行时不会导致任何问题。
此外,我尝试通过以下方式进行调试:在 mate-terminal 中,我列出了我的主目录(包含带有波兰语特殊字符的文件和目录)并将输出重定向ls
到测试文件。然后我切换到另一个 tty 和cat
测试文件——字符打印正确。
我已经尝试过了dpkg-reconfigure locales
。语言包已通过 MATE 控制中心安装(并在此过程中重新安装)。
接下来我要尝试什么?
编辑:
在mate-terminal
图形环境中:
$ 语言环境 区域设置:无法将 LC_ALL 设置为默认区域设置:没有这样的文件或目录 LANG=en_GB.UTF-8 语言= LC_CTYPE="en_GB.UTF-8" LC_NUMERIC=\"pl_PL.UTF-8\" LC_TIME=en_GB.UTF-8 LC_COLLATE="en_GB.UTF-8" LC_MONETARY=\"pl_PL.UTF-8\" LC_MESSAGES="en_GB.UTF-8" LC_PAPER=\"pl_PL.UTF-8\" LC_NAME=\"pl_PL.UTF-8\" LC_ADDRESS=\"pl_PL.UTF-8\" LC_TELEPHONE=\"pl_PL.UTF-8\" LC_MEASUREMENT=\"pl_PL.UTF-8\" LC_IDENTIFICATION=\"pl_PL.UTF-8\" LC_ALL=
在 tty1 中(字符编码工作正常):
$ 语言环境 LANG=en_GB.UTF-8 LANGUAGE=en_GB:en LC_CTYPE="en_GB.UTF-8" LC_NUMERIC=pl_PL.UTF-8 LC_TIME=en_GB.UTF-8 LC_COLLATE="en_GB.UTF-8" LC_MONETARY=pl_PL.UTF-8 LC_MESSAGES="en_GB.UTF-8" LC_PAPER=pl_PL.UTF-8 LC_NAME=pl_PL.UTF-8 LC_ADDRESS=pl_PL.UTF-8 LC_TELEPHONE=pl_PL.UTF-8 LC_MEASUREMENT=pl_PL.UTF-8 LC_IDENTIFICATION=pl_PL.UTF-8 LC_ALL=
编辑:
grep -Rs pl_PL /etc ~/.?*
删除“二进制文件 x 匹配模式”并通过管道传输后,产生sort | uniq
:
/etc/默认/区域设置 /etc/locale.alias /etc/locale.gen /etc/mdm/locale.conf /home/marta/../marta/.bash_history /home/marta/../marta/.config/user-dirs.locale /home/marta/../marta/.linuxmint/mintMenu/apt.cache /home/marta/../marta/.pam_environment /home/marta/../marta/.xsession-errors /home/marta/.bash_history /home/marta/.config/user-dirs.locale /home/marta/.linuxmint/mintMenu/apt.cache /home/marta/.pam_environment /home/marta/.xsession-errors
是的,这台电脑实际上不是我的,但没关系:)
另一个编辑:
包含区域设置的文件的内容:
$ 猫 /etc/default/locale LANG="en_GB.UTF-8" LANGUAGE="en_GB:en" LC_NUMERIC="pl_PL.UTF-8" LC_TIME="en_GB.UTF-8" LC_MONETARY="pl_PL.UTF-8" LC_PAPER="pl_PL.UTF-8" LC_IDENTIFICATION="pl_PL.UTF-8" LC_NAME =“pl_PL.UTF-8” LC_ADDRESS="pl_PL.UTF-8" LC_TELEPHONE="pl_PL.UTF-8" LC_MEASUREMENT="pl_PL.UTF-8"
$ cat /home/marta/.pam_environment LC_NUMERIC="pl_PL.UTF-8" LC_TIME=en_GB.UTF-8 LC_MONETARY="pl_PL.UTF-8" LC_PAPER="pl_PL.UTF-8" LC_IDENTIFICATION="pl_PL.UTF-8" LC_NAME =“pl_PL.UTF-8” LC_ADDRESS="pl_PL.UTF-8" LC_TELEPHONE="pl_PL.UTF-8" LC_MEASUREMENT="pl_PL.UTF-8"
$ cat /home/marta/.config/user-dirs.locale pl_PL
答案1
您可能有一个 .pam_environment 文件,其中 LC_ 变量的值用双引号引起来:
# WRONG
LC_TIME="en_US.UTF-8"
相反,它应该看起来像这样(没有引号):
LC_TIME=en_US.UTF-8
因此,要么删除 .pam_environment 文件
mv ~/.pam_environment ~/.pam_environment.off
或编辑它以删除值周围的双引号:
perl -i.bak -pe 's/"//g' ~/.pam_environment
有关详细信息,请参阅此:“生成的语言环境文件不得包含双引号“ 在 Github 上的 linuxmint/mintlocale 中