2014-04-05 17 views
4

我正在使用RTF解析器,並且在處理unicode時遇到了一些困難。解析來自RTF文件的值> 32767的unicode

RTF規範指出:「大於32767的Unicode值必須表示爲負數」(http://www.biblioscape.com/rtf15_spec.htm#Heading9),爲了獲得Unicode數值,我們將65536添加到這些負數。

我通過用Unicode字符32767和32768字(在Mac V2011)建立一個文檔檢測該場景中產生下面的RTF語法那些2個字符:

\u32767\'5f\loch\af556\hich\af31506\dbch\f556 \uc2\u-32768\'97\'73 

對於第二個, - 如預期的那樣,32768 + 65536是32768。所以,這個命令是有意義的。

我的問題是與文本轉義序列,如\ '97 \ '73在結束。我不明白爲什麼那裏。我可以編碼解析器來忽略鏈接到\ uNNNN命令末尾的命令。但我與文字編輯的RTF輸出相比,它僅輸出文字轉義序列:

\uc0\u32767 \'97\'73 

看起來像是一個想成爲一個雙字節的Unicode轉義序列。那種文本轉義是十六進制的。但0x9773是38771,而不是32768,所以我不明白如何從該數據中提取所需的unicode值。有任何想法嗎?

更新:我跑了一些進一步的測試,看看文字編輯是如何處理的字符代碼32767 - 32777.他們看起來像這樣在RTF:

\u32767 
\'97\'73 
\'98\'56 
\u32770 
\'8d\'6c 
\'e3\'cc 
\'8e\'d2 
\'e3\'cb 
\u32775 
\u32776 
\'c2\'56 

這RTF將在這兩個文本編輯和Word正確加載,那麼清楚這是有效的。我只是在這裏看不到一個模式。

回答

0

RTF中的\ u標記後面跟着使用ASCII或多字節字符集表示Unicode字符的回退字符數。這是爲了與不支持\ u標籤的舊RTF閱讀器向後兼容。代表Unicode字符所需的後備字符數由\ uc標籤指定。多字節字符集的Unicode字符需要多個後備字符來表示它,因此\ uc標記值爲2或更多。大多數現代RTF閱讀器會忽略回退字符,因此它們的值不再顯着。我希望這能回答你關於模式的問題。