我正在處理由其他人在未知平臺上創建的RTF文件,並且除了某些字符外,所有內容都被正確解釋,無論我在openoffice中打開它們的任何字符集。這裏是純文本,解讀後:「MEME taille闕拉漁村,即使得到集體,即使得到âgec金星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。「
要放大:
「âgec維納斯」 變爲 「\ 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編碼回來!
我會建議一個小編輯到這篇文章:給我們一個字節級轉儲的文件的部分,而不是試圖解釋爲unicode字符。即,例如「2C 81 FF」。 – 2012-04-12 12:10:59
你說得對,這裏是「\ 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