LMDE2 / MATE 語言環境字元集不一致
我有一台裝有 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 顯示的與另一個 tty 中相同的文件夾
zdj?cia
被正確標記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/default/locale /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
是的,這台電腦實際上不是我的,但沒關係:)
另一個編輯:
包含區域設置的文件的內容:
$ cat /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
您可能有一個 .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
有關詳細資訊,請參閱linuxmint/mintlocale 中 Github 上的“生成的語言環境文件不能有雙引號”