2012-04-12 123 views
4

我正在處理由其他人在未知平臺上創建的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

回答

2

什麼翻譯文本(法語)會使得我們的期望是「:」(分號

近:它應該是省略號可以看到原文例如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