我們已經編寫了一個應用程序,它將打開Microsoft Word文檔,讀取裏面的所有文本,然後將該數據發送到外部系統進行處理。這在過去運行良好,但由於我們已經接受了Unicode,所以我們在閱讀Word文檔時遇到了一些問題。從MS Word文檔檢索SurrogatePairs
我們看到的問題是我們無法顯示佔用多個代碼單元的任何字符,例如(代理對)或ā̈(字形集羣)。當我們試圖展示時,我們得到兩個??,並且用??,我們得到組成這個字形的每個單獨的角色。
我有一種感覺,我們看到這些字符返回的原因是因爲我們沒有正確讀取文件。不過,我一直在尋找,但還沒有找到解決方案。
我創建了一個只包含單個值的Word文檔:。
我們的代碼做的第一件事是文件讀入到一個字節數組:
FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
wordDocument = new byte[fileStream.Length];
fileStream.Read(wordDocument, 0, (int)fileStream.Length);
fileStream.Close();
在字節數組的進一步調查包含以下值:
{63, 63, 10, 13}, or in hex {0x3f, 0x3f, 0x0d, 0x0a}
從仰視十六進制值,我知道0x3f與一個?有關,這就解釋了爲什麼我們要回來兩個??。
然後,當我們試圖將數據轉換回字符串時,我們最終得到了兩個?
textdata = System.Text.Encoding.Unicode.GetString(wordDocument);
我覺得這個問題可能與我們在文檔中的閱讀方式有關,但我不是100%確定的。任何人都可以引導我走上正確的道路嗎?
Word文檔不是純文本。 – SLaks
對,我回想起那些雙重想法的時候?而不是代理對。問題是,你如何正確獲取Word文檔中的所有數據? –
您需要爲Word文件格式(.doc或.docx)編寫解析器。這並不容易。 – SLaks