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

我通过寻找ANSICPG( ansi ansicpg1252)来知道我的文档代码页面。

当我使用ANSICPG代码epage解码为Unicode时,许多语言(例如法语)似乎转换为我期望的Unicode Char值。

但是,当我看到俄罗斯文本(如下)时,编码1252将内容解码为jibberish。

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

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

有帮助吗?

解决方案

\lang 实际上,仅将文本的特定拉伸标记为特定语言,并且不应影响旧的非unicode的代码页面 \' 逃脱。

放一个 \ansicpg 标题中的令牌也许应该这样做,但似乎被单词忽略了(对于原始字节和 \' 逃脱。

还是我必须使用 f277作为字体参考,看看它是否具有关联的代码epage?

看起来那样。更改 \fcharset 无论如何,分配给特定文本的字体是唯一能够改变其对待字节的唯一方法。这个令牌中的代码(请参阅 这里 对于列表),加重,与语言ID或代码页码再次不同。

其他提示

并不清楚,但是您可以使用RichEdit控件来根据MSDN将RTF转换为UTF-8格式:http://msdn.microsoft.com/en-us/library/windows/desktop/bb774304(V=VS.85).aspx查看em_streamout消息的sf_usecodepage。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top