0

我正在尝试解析一些从服务器返回的 RTF。对于我得到的大多数文本,这工作正常(并且使用 RichTextBox 控件可以完成这项工作),但是一些 RTF 似乎包含额外的“编码”并且一些字符被损坏。

原始字符串如下(并包含一些波兰语中使用的字符):

ąćęłńóśźż

发回的带有十六进制编码字符的 RTF 字符串如下所示

{\lang1045\langfe1045\f16383 {\'b9\'e6\'ea\'b3{\f7 \'a8\'bd\'a8\'ae}\'9c\'9f\'bf}}

我在解码返回字符串中的ñó字符时遇到问题,它们似乎每个都由两个十六进制值表示,而字符串的其余部分(如预期的那样)由单个十六进制值表示。

使用 RichTextBox 控件“解析”RTF 会导致文本损坏(有问题的两个字符显示为四个不同的不需要的字符)。

如果我自己使用预期的代码页(1250,Latin 2,lcid 1045 的 ANSI 代码页)将纯字符串编码为十六进制,我将得到以下信息:

\'B9\'E6\'EA\'B3\'F1\'F3\'9C\'9F\'BF

我不知道如何正确解码应该对应于ńó的返回字符串的{\f7 \'a8\'bd\'a8\'ae}部分。

请注意,在 RTF 标头中没有\f7的字体定义,当直接在服务器上查看时,字符串看起来很好,这意味着字符(如果它们已损坏)在发送前的转换中某处已损坏。

我不确定问题是否出在服务器端(因为我无法控制),但由于服务器用于大量翻译工作,我假设返回的字符串是可以的。

我一直在阅读 RTF 规范,但找不到关于这种类型的编码组合的任何提示。

4

1 回答 1

1

我不知道为什么会这样,但编码似乎是GBK(或类似的东西)。

也许服务器会尝试做一些“聪明”的匹配来查找字符,或者服务器的默认字符编码是 GBK 左右,而这些字符(并且只有那些)也出现在 GBK 中,所以它更喜欢那样。

我通过将有问题的十六进制代码A8 BD A8 AE

<html><body>¨½¨®</body></html>

令我惊讶的是,我的浏览器立即提出了“ńó”。

于 2009-01-30T23:58:33.407 回答