当我使用该write
程序发送消息时,如何使用 UTF-8 字符?
我发送:
write user2
Ehilà! Com'è?
Run Code Online (Sandbox Code Playgroud)
但是接收器得到:
Message from user1@samehost on pts/1 at 21:08 ...
EhilM-CM- ! Com'M-CM-(?
Run Code Online (Sandbox Code Playgroud)
机器是一样的,LANG
在 konsole 中已经是en_US.UTF-8
。
似乎write
将高位解释为“元-”(Meta+键或Esc键)。快速查看源代码(函数wr_fputs()
中write.c
)证实了这一点:控制字符被示出为^X
与高比特的字符集被示出为M-X
。语言环境设置、终端和编码与它无关,恐怕。write
只是 7 位。
现在,我是一个 Unicode 怪胎,但这有点变态。write
只需打开目标 TTY 并写入它(不涉及魔法)。没有简单的方法可以让控制远程 TTY 的进程理解字符编码。即使有,也并非所有编码都可以转换为所有其他编码。如果不进行转换,将 KOI8-R 中的消息传输到 ISO-8859-1 控制台会失败。由于write
采用了简单的 70 年代方法,这就是我们所得到的。