Locale

LMDE2 / MATE 語言環境字元集不一致

  • June 12, 2015

我有一台裝有 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 上的“生成的語言環境文件不能有雙引號”

引用自:https://unix.stackexchange.com/questions/198384