如何发现将RTF十六进制文字转换为Unicode时要使用的代码页

Mal*_*olm 5 unicode rtf ms-word codepages word-2003

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

我通过查找ansicpg(\ ansi\ansicpg1252)来了解我的文档代码页.

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

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

\ f277\lang1049\langfe1033\langnp1049\insrsid5989826\charrsid6817286\'D1 \' F2\'F0 \' E0\'编\' E8\'F6 \' FB\'E1 \' E5\'E7 \' 编\" E0\'E7 \' E2\'E0 \' 编\ 'E8 \' FF.\ 'DD \' F2\'E0 \' F1\'F2 \' F0\'E0 \' 编\ 'E8 \' F6\'E0 \' 编\ 'E5 \' E4\'EE \' EB \" E6\'编\' 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\'编\' E8 \'E8 .

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

bob*_*nce 4

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

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

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

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