我有一个使用utf-8编码的roff文件,想要将其转换为man手册。
$ nroff -mandoc inittab.5
然而,包含[äöüÄÖÜ]
等字符的文本不能正确地显示,因为似乎nroff假定了ISO 8859-1编码(我得到了[äöüÃÃÃ
])。使用-Tutf8
标志调用nroff
并不会改变行为,区域环境变量已设置(我认为是正确的)。
LANG=de_DE.utf8
LC_CTYPE="de_DE.utf8"
LC_NUMERIC="de_DE.utf8"
LC_TIME="de_DE.utf8"
LC_COLLATE="de_DE.utf8"
LC_MONETARY="de_DE.utf8"
LC_MESSAGES="de_DE.utf8"
LC_PAPER="de_DE.utf8"
LC_NAME="de_DE.utf8"
LC_ADDRESS="de_DE.utf8"
LC_TELEPHONE="de_DE.utf8"
LC_MEASUREMENT="de_DE.utf8"
LC_IDENTIFICATION="de_DE.utf8"
LC_ALL=
由于nroff
只是一个包装脚本,最终调用groff
,因此我检查了对后者的调用,即:
$ groff -Tutf8 -mandoc inittab.5
比较源文件和输出文件中字符的字节编码,我得到了以下转换:
character src file output file
--------- -------- -----------
ä C3 A4 C3 83 C2 A4
ö C3 B6 C3 83 C2 B6
ü C3 BC C3 83 C2 BC
Ä C3 84 C3 83
Ö C3 96 C3 83
Ü C3 9C C3 83
ß C3 9F C3 83
这种行为对我来说非常奇怪(为什么会多出一个C3 83
并且在处理大写字母变音符和ß
时原始的字节序列被完全截断了?)
为什么会这样,我该如何使nroff
/groff
正确地转换我的UTF-8编码文件?
编辑:我正在使用GNU nroff (groff) version 1.22.2
less inittab.5
命令时,你能看到正确的字符吗?顺便说一句,这个问题不适合在这个网站上讨论,你可以去 Unix/Linux StackExchange 上寻求更好的帮助。 - n. m.