nroff / groff无法正确转换utf-8编码文件

问题描述 投票:0回答:1

我有一个utf-8编码的roff文件,我想转换为手册页

$ nroff -mandoc inittab.5

但是,[äöüÄÖÜ]中的字符,例如没有正确显示,因为似乎nroff假定ISO 8859-1编码(我正在获得[äöüÃÃÃ)。用nroff标志调用-Tutf8不会改变行为,并且locale环境变量(我假设正确)设置为

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只是一个包装脚本,并最终calles groff我检查了后者的调用,这是:

$ groff -Tutf8 -mandoc inittab.5

比较src文件和输出文件中字符的字节编码,我得到以下转换:

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

linux encoding utf-8
1个回答
0
投票

与其他troff实现(即Plan 9和Heirloom troff)不同,groff不支持文档中的UTF8。但是,可以使用preconv(1)预处理器实现UTF8输出,该预处理器将文件中的UTF8字符转换为groff本机转义序列。

以这个groff_ms(7)文件为例:

.TL
StackOverflow Test Document
.AU
ToasterKing
.PP
I like going to the café down the street

äöüÄÖÜ

通常使用groff,我们得到:

                StackOverflow Test Document


                        ToasterKing


     I like going to the café down the street

äöüÃÃÃ

但是当使用preconv | groffgroff -k时,我们得到:

                StackOverflow Test Document


                        ToasterKing


     I like going to the café down the street

äöüÄÖÜ

查看preconv的输出,您可以看到它如何将字符转换为转义序列:

.lf 1 so.ms
.TL
StackOverflow Test Document
.AU
ToasterKing
.PP
I like going to the caf\[u00E9] down the street

\[u00E4]\[u00F6]\[u00FC]\[u00C4]\[u00D6]\[u00DC]
© www.soinside.com 2019 - 2024. All rights reserved.