Terminal

終端顯示非ASCII?UTF-16 十六進制程式碼中的字元

  • December 9, 2018
todoroki@todoroki-VJZ13B ~>printf "ä\n"
                          echo "ä"
                          ä
ä
ä
\udcc3\udca4: \u30b3\u30de\u30f3\u30c9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093

根據UTF-16 解碼工具\u30b3\u30de\u30f3\u30c9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093コマンドが見つかりません(= “command not found”),這是我期望的正確日語輸出。

從 printf 和 echo 結果來看,UTF-8 似乎工作正常。

這發生在所有 shell 輸出中,例如ls(文件名中的日文字元以 UTF-16 十六進制格式顯示)

編輯: ls輸出不是 utf-16,而是稱為“八進制轉義序列”的東西(變成\346\234\210

ls在包含 3 個名為 、 和輸出的文件夾的C目錄あいう

todoroki@todoroki-VJZ13B ~/test> ls -l
total 12
drwxr-xr-x 3 todoroki todoroki 4096 10月  4 15:02  C/
drwxr-xr-x 2 todoroki todoroki 4096 10月 11 09:04 ''$'\343\201\202\343\201\204\343\201\206'/
drwxr-xr-x 2 todoroki todoroki 4096 10月 11 09:05 ''$'\346\234\210'/

(這很奇怪,因為文件創建日期顯示正確,而目錄名稱則沒有)

less vi nano行為更奇怪;如下所示的文件(a.txt,使用 gedit 創建)

あ
い
う
ä

將顯示為

less(它抱怨"a.txt" may be a binary file. See it anyway?):

<E3><81><82>
<E3><81><84>
<E3><81><86>
<C3><A4>

vi

�~A~B
�~A~D
�~A~F
ä

並在nano

^a^b
^a^d
^a^f

我不記得我做了什麼,但它至少在兩天前(並且超過 6 個月)正確顯示了日文字母。

可能是什麼問題以及從中恢復的方法?

我不小心更新了fish要讀取的配置文件~/.profile

其中包含一行內容locale=C

我把它改成了locale=C_UTF8,一切都恢復了。

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