系统不再输出 UTF-8 字符

系统不再输出 UTF-8 字符

我的服务器刚刚遇到一个问题,它的响应速度非常慢,所以我强制它通过 SSH 重新启动。当我重新连接时,我发现我的系统不再正确输出某些字符。

示例:我tree经常使用该命令来快速查看目录的结构及其内部内容,当我在另一个系统上使用它时,我将得到以下输出:

root@hostname:/tmp# tree
.
└── test
    ├── bar
    │   ├── bar
    │   ├── baz
    │   └── foo
    └── foo

2 directories, 4 files

但是,如果我现在在我的系统上执行此操作,我会得到以下信息:

root@hostname:/tmp# tree
.
ΓööΓöÇΓöÇ test
    Γö£ΓöÇΓöÇ bar
    │   ├── bar
    │   ├── baz
    │   └── foo
    ΓööΓöÇΓöÇ foo

2 directories, 4 files

有什么方法可以查明这是如何发生的吗?我怎样才能恢复它?

编辑

使用LC_ALL=C tree输出如下:

root@hostname:/tmp# LC_ALL=C tree
.
`-- test
    |-- bar
    |   |-- bar
    |   |-- baz
    |   `-- foo
    `-- foo

2 directories, 4 files

使用locale输出如下:

root@hostname:/tmp# locale
LANG=en_GB.utf8
LANGUAGE=
LC_CTYPE="en_GB.utf8"
LC_NUMERIC="en_GB.utf8"
LC_TIME="en_GB.utf8"
LC_COLLATE="en_GB.utf8"
LC_MONETARY="en_GB.utf8"
LC_MESSAGES="en_GB.utf8"
LC_PAPER="en_GB.utf8"
LC_NAME="en_GB.utf8"
LC_ADDRESS="en_GB.utf8"
LC_TELEPHONE="en_GB.utf8"
LC_MEASUREMENT="en_GB.utf8"
LC_IDENTIFICATION="en_GB.utf8"
LC_ALL=en_GB.utf8

答案1

问题中的信息很粗略。然而,示例输出显示错误编码树中的字符比预期的要多。可能发生的情况是tree在可以发送 UTF-8 的环境中运行。对于所使用的图形字符,每个特殊字符占 3 个字节。一方面(本地或远程无关紧要),OP正在使用的东西重新编码将它们转换为 UTF-8,增加字节数(因为输出中的每个字节tree将在 128-255 范围内)。

例如,如果 OP 运行在xterm(使用卢伊特),并通过(实际上)告诉 luit 实际编码是 来混淆事情en_GB,它将把这 128-255 个值中的每一个转换为 2-3 个字节(“返回”为 UTF-8)。

顺便一提,巴什与问题无关,因为它是(一个独特的实用程序)编写文本。

答案2

使用 LC_ALL=en_US.UTF-8 使树字符正确,但排序混乱

改回 LC_ALL=C 这样排序就可以正常工作

在 Mint Mate 20.1 之前从未出现过排序和字符问题,这一切都可以正常工作

相关内容