亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何正確解碼 RTF 中的十六進制值

如何正確解碼 RTF 中的十六進制值

慕容3067478 2021-11-09 15:16:09
不幸的是,這個有兩個漏洞,文本編碼和 RTF。但它在這里。背景我正在研究 NLP 文本管道,我們需要將 RTF 轉換為純文本,換句話說,我們需要刪除 RTF 控制字符并保持文本內容不變。我們正在用 python 構建管道,它有幾個要求阻止我們在生產中使用 Apache Tikka 之類的東西。我知道 RTF 可以包含十六進制值,例如\'a9文檔的作者是否鍵入了非 ascii 字符。我也知道文檔中的第一個控制字符序列指定了如何解碼這些十六進制值,例如\ansicpg1252. 例如,在這種情況下,存在\ansicpg1252在文檔裝置,其開頭\'a9應該被解釋為Unicode代碼點00A9 (COPYRIGHT SIGN)按所述窗口1252的編碼。題我遇到了一個帶有\ansicpg1252第一組控制字符的 RTF 文檔,但是文檔中有幾個地方出現了以下十六進制文字,\'81\'aa. 這是令人困惑的,因為0x81在windows-1252編碼中未定義。我想也許它可能是utf-8,但是它沒有在utf-8任何一個中定義。WordPad.exe 用這個字符代表這兩個字節:↑Apache Tikka 使用同一個字符,↑這個字符對應于 unicode code point 2191 (Upwards Arrow),而且我們的神秘字節 ,0x81AA是使用包含日語字符的Windows 代碼頁 932 編碼對這個字符進行編碼的結果。作為參考,RTF 文檔中這兩個字節的完整上下文是\plain\f1\fs20 \'81\'aa\plain\f0\fs20并且文檔在\fonttbl組中包含此條目:{\f1\fmodern\fcharset128\fprq1 MS Mincho;}據我了解,這意味著后面的任何文本\f1都應該使用該MS Mincho字體呈現,這是有道理的,因為MS Mincho包含日語字形。但是 RTF 解析器如何知道0x81AA應該使用Windows Code Page 932而不是ansicpg1252文件第一行中指定的方式進行解碼?我需要知道某些字體暗示某些編碼嗎?我最好的猜測是它與\fonttbl條目中說的部分有關\fcharset128,但我不確定。
查看完整描述

1 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

發表評論后,我做了更多的挖掘......

fcharset參數來自固定的一組值,其映射到使用的編碼的。下面是一個例子:

https://github.com/joniles/rtfparserkit/blob/master/src/main/java/com/rtfparserkit/parser/standard/FontCharset.java

從記憶中,我我是從 Microsoft 的 RTF 規范文檔 ( https://www.microsoft.com/en-us/download/details.aspx?id=10725 ) 中挑選出來的


查看完整回答
反對 回復 2021-11-09
  • 1 回答
  • 0 關注
  • 336 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號