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

时间:2010-09-24 14:04:30

标签: unicode ms-word rtf 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 \'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作为字体引用并查看它是否有相关的代码页?)

2 个答案:

答案 0 :(得分:2)

\lang实际上只会将文本的特定范围标记为特定语言,并且不应影响将用于旧的非Unicode \'转义的代码页。< / p>

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

  

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

看起来那样。更改分配给特定文本范围的字体的\fcharset是我可以让Word更改它如何处理字节的唯一方法。此令牌中的代码(请参阅例如here列表)与语言ID或代码页编号相反,更加不同。

答案 1 :(得分:1)

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