5

我正在解析由 Word 2003+ 生成的 RTF 1.5+ 文件,这些文件可能包含其他语言的内容。此内容通常编码为十六进制文字 (\'xx)。我想将这些文字转换为 unicode 值。

我通过查找 ansicpg (\ansi\ansicpg1252) 知道我的文档的代码页。

当我使用 ansicpg 代码页解码为 Unicode 时,许多语言(如法语)似乎都转换为我期望的 Unicode 字符值。

但是,当我看到俄语文本(如下所示)时,代码页 1252 会将内容解码为乱码。

\f277\lang1049\langfe1033\langnp1049\insrsid5989826\charrsid6817286 \'d1\'f2\'f0\'e0\'ed\'e8\'f6\'fb \'e1\'e5\'e7 \'ed\' e0\'e7\'e2\'e0\'ed\'e8\'ff。\'dd\'f2 \'e0 \'f1\'f2\'f0\'e0\'ed\'e8\'f6\'e0 \'ed\'e5 \'e4\'ee\'eb\' e6\'ed\'e0 \'ee\'f2\'ee\'e1\'f0\'e0\'e6\'e0\'f2\'fc\'f1\'ff \'e2 \'f2\ 'e0\'e1\'eb\'e8\'f6\'e5 \'e2 \'f1\'ee\'e4\'e5\'f0\'e6\'e0\'ed\'e8\'e8 .

我假设 lang1049、langfe1033、langnp1049 应该为我提供线索,以便我可以以编程方式为它们引用的文本选择不同的(非默认)代码页?如果是这样,我在哪里可以找到解释如何将 lang* 代码映射到代码页的信息?还是我应该寻找其他一些 RTF 命令/指令来为我提供我正在寻找的信息?(或者我必须使用 \f277 作为字体参考,看看它是否有相关的代码页?)

4

2 回答 2

3

\lang实际上只是将文本的特定部分标记为特定语言,并且不应影响用于旧的非 Unicode\'转义的代码页。

在标头中放置一个\ansicpg标记也许应该这样做,但似乎被 Word 忽略了(对于原始字节和\'转义。

或者我必须使用 \f277 作为字体参考并查看它是否有关联的代码页?

看起来是这样的。无论如何,更改\fcharset分配给特定文本段的字体是我可以让 Word 更改它如何处理字节的唯一方法。此令牌中的代码(参见例如此处的列表)再次与语言 ID 或代码页号不同。

于 2010-09-24T15:44:14.150 回答
1

不太清楚,但您可以使用 RichEdit 控件根据 MSDN 将 RTF 转换为 UTF-8 格式:http: //msdn.microsoft.com/en-us/library/windows/desktop/bb774304( v=vs.85).aspx 查看 SF_USECODEPAGE 以获得 EM_STREAMOUT 消息。

于 2011-10-19T13:12:49.907 回答