RTF错误代码片段的含义

问题描述:

我正在处理由其他人在未知平台上创建的RTF文件,并且除了某些字符外,所有内容都被正确解释,无论我在openoffice中打开它们的任何字符集。这里是纯文本,解读后:“MEME taille阙拉渔村,即使得到集体,即使得到âgec金星souvent ETEqualifiée德sœur德拉渔村”RTF错误代码片段的含义

和这里原ANSI段落:

“M \ U234 \ '3fme taille阙LA渔村,米\ U234 \' 3fme集体,米\ U234 \ '3fme \ U226 \' 3fge \ UC2 \ u61825 \'FF \ '81 \ uc1 c V \ u333 \'3 fnus a souvent \'3ft \'3f qualifi \'3fe de s \ u339'3fur de la Terre。“

要放大:

“âgec维纳斯” 变为 “\ 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,其他)被refered到(在文件中的所有其他地方一\uN\'XX序列apears,XX总是3F为“?”,在Windows 1252代码,因此它并没有给我太多的信息)

  • 什么是\'FF(它看起来像一个转义序列里面的一些控制字符!)代表,然后为什么\'81 ...实际上,\u61825到十六进制的翻译是F181,而不是FF81 ...我迷路了!

最后,有什么翻译的文本(法语)会使得我们的期望是“:”(分号):“跟地球差不多一样,相同的质量,相同的年龄:金星常常被认定为地球的姊妹”。这是有道理的。但是rtf作者可以想象这样一个复杂的分号代码?

再次,经过1个小时的搜索后,我向你们打开了一个问题:有人认识到这一点,可以告诉我使用了什么控制字编码,这里有一个大的endian/little endian/2的补充混乱与61825,并与\'ff\'81相同,这将组装为FF81而不是F181,这本身并不意味着任何东西......这里我的问题是只知道是否有一种方法可以找到完整的原始文本从奇怪的RTF编码回来!

+0

我会建议一个小编辑到这篇文章:给我们一个字节级转储的文件的部分,而不是试图解释为unicode字符。即,例如“2C 81 FF”。 – 2012-04-12 12:10:59

+0

你说得对,这里是“\ uc2 \ u61825 \'ff \ '81 \ uc1 c”的十六进制转储: 5C 75 63 32 20 5C 75 36 31 38 32 35 5C 27 66 66 5C 27 38 31 5C 75 63 31 20 63 - 正是它应该是! – MrBrody 2012-04-12 16:49:08

什么翻译文本(法语)会使得我们的期望是“:”(分号

近:它应该是省略号可以看到原文例如here

这个省略号通常应该简单地写成三个时间段,但是为了更好地控制它们的间距,在传统的文本布局算法存在的情况下可以进行自动字形替换,传统上它们是一个表示省略号的独立字符,因此存在Unicode兼容性字符U + 2026水平ELLIPSIS允许来回传统编码,如Windows代码页1252,它是字节133.

然而,这不是你的RTF文档中编码的东西。那太简单了。

61825是一个未知的Unicode字符。

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

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

+0

whao,我不认为有人会发现这件事......我对你在这里所说的一切都一无所知,你比我深刻得多了!谢谢你,我认为你是对的,通过一些警察传送给PUA,一定要用一些非常奇怪的方式来提及省略号。 – MrBrody 2012-05-04 03:56:37