终端显示非ascii? UTF-16 十六进制代码中的字符

终端显示非ascii? UTF-16 十六进制代码中的字符
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コマンドが見つかりません(=“命令未找到”),这是我期望的正确的日语输出。

从 printf 和 echo 结果来看,UTF-8 似乎工作正常。

这种情况发生在所有 shell 输出中,例如ls(文件名中的日语字符以 UTF-16 十六进制格式显示)
编辑: ls输出不是 utf-16,而是所谓的“八进制转义序列”(其中变为\346\234\210

lsC在包含 3 个名为、あいう和的文件夹的目录中

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 个月)它正确地显示了日语字母。

可能是什么问题以及如何恢复?

答案1

我不小心将我的fish配置文件更新为 read ~/.profile
其中包含一行内容locale=C

我将其更改为locale=C_UTF8,一切都恢复了。

相关内容