我的服务器刚刚遇到一个问题,它的响应速度非常慢,所以我强制它通过 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 之前从未出现过排序和字符问题,这一切都可以正常工作