我正在解析由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作为字体引用并查看它是否有相关的代码页?)
答案 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消息。