我正在使用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正確加載,那麼清楚這是有效的。我只是在這裏看不到一個模式。