RTF故障代码的含义

时间:2012-04-12 11:15:13

标签: unicode encoding controls rtf

我正在处理由未知平台上的其他人制作的RTF文件,除了一些字符外,所有内容都被正确解释,无论我在openoffice中打开它们的字符集。解释后,这是纯文本:

  

“Mêmetailleque la Terre,mêmemasse,mêmeâgecVénusasouventétéqualifiéedesœurde Terre。”

这是最初的ANSI段落:

  

“M \ u234 \'3fme taille que la Terre,m \ u234 \'3fme masse,m \ u234 \'3fme \ u226 \'3fge \ uc2 \ u61825 \'ff \ '81 \ uc1 c V \ u233 \'3fnus a souvent \ u233 \'3ft \ u233 \'3f qualifi \ u233 \'3fe de s \ u339 \'3fur de la Terre。“

放大:

  

“âgecVénus”成为“\ u226 \'3fge \ uc2 \ u61825 \'ff \ '81 \ uc1 c V \ u233 \'3fnus”

最后,我们提出了什么:

  

“\ uc2 \ u61825 \'ff \ '81 \ uc1 c”

此处\uc2\uc1表示我们在4字节和2字节Unicode编码之间来回切换。

\u61825是一个未知的Unicode字符。实际上,根据RTF规范,任何大于2 ^ 15的UTF字符都应以负片形式书写;带有ANSI字符的否定形式应该使记事本看到“ - ”(减号)符号,对吗?所以我已经有了一些我不明白的东西,首先制作rtf文件的人使用的RTF编写器是如何做到的。也许我在规范,特定版本,字符集中遗漏了一些东西,我不知道。如果按原样使用,则61825将对应于位于Unicode表的私有区域中的F181。

然后,\'ff\'81将使用整个“特定字符”组(其结构通常为\uN\'XX)的ANSI等效字段,以编码4字节的内容长。再一次,我找不到:

  • 提到的代码页(Windows-1252,ISO-8859-1,其他?)是什么(与文件中\uN\'XX序列所在的所有其他位置一样,{{ 1}}总是XX,Windows-1252代码为“?”,所以它没有给我太多信息)

  • 3F(看起来像转义序列中的一些控制字符!)代表什么,然后是\'FF ...实际上,{{1}的翻译}到十六进制是\'81,而不是\u61825 ......我迷失在这里!

最后,翻译后的文本(用法语)会让我们期待的是“:”(分号):“与地球大小相同,质量相同,年龄相同:金星经常被认定为地球的姐妹”。这是有道理的。但是什么rtf作家可以想象这样一个复杂的分号代码呢?

再次,经过1小时的搜索,我向你们提出问题:有人认识到这一点,并且可以告诉我使用了什么控制字编码,这里有一个大端/小端/ 2的补码61825,与F181相同,FF81汇集为\'ff\'81而不是FF81,这本身并不意味着什么...这里我的问题只是知道是否有一种方法可以从奇异的RTF编码中找回完整的原始文本!

1 个答案:

答案 0 :(得分:2)

  

翻译的文本(用法语)会让我们期待的是“:”(分号

几乎:它应该是省略号。您可以看到源文本,例如here

省略号通常应简单地写成三个句点,但传统上一直是表示省略号的单独字符,以便更好地控制它们的间距,在复杂的文本布局算法存在之前可以进行自动字形替换。因此,存在Unicode兼容性字符U + 2026 HORIZONTAL ELLIPSIS,允许往返于传统编码,例如Windows代码页1252,它是字节133.

然而,这不是您的RTF文档中编码的内容。这太容易了。

  

61825是一个未知的Unicode字符。

这是一个私人使用区域角色,这意味着它可以代表任何东西。 Word已将某些常用符号字体导出为PUA字符 - 有关背景,请参阅this post

所以有人在某些时候可能使用了符号字体,其中代码单元129(U + F181中的0x81,61825)映射到看起来像省略号的东西。这个字体是什么,我不知道!它似乎不是通常的嫌疑人之一(符号,Wingdings,Webdings)。您可能只需要手动将U + F181替换为U + 2026,除非您可以找到有关源的更多信息。