在`write`消息程序中使用UTF-8字符

MMM*_*MMM 4 konsole unicode

当我使用该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

Ale*_*ios 9

似乎write将高位解释为“元-”(Meta+键或Esc键)。快速查看源代码(函数wr_fputs()write.c)证实了这一点:控制字符被示出为^X与高比特的字符集被示出为M-X。语言环境设置、终端和编码与它无关,恐怕。write只是 7 位。

现在,我是一个 Unicode 怪胎,但这有点变态。write只需打开目标 TTY 并写入它(不涉及魔法)。没有简单的方法可以让控制远程 TTY 的进程理解字符编码。即使有,也并非所有编码都可以转换为所有其他编码。如果不进行转换,将 KOI8-R 中的消息传输到 ISO-8859-1 控制台会失败。由于write采用了简单的 70 年代方法,这就是我们所得到的。