2012-12-17 95 views
0

我們已經編寫了一個應用程序,它將打開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%確定的。任何人都可以引導我走上正確的道路嗎?

+0

Word文檔不是純文本。 – SLaks

+0

對,我回想起那些雙重想法的時候?而不是代理對。問題是,你如何正確獲取Word文檔中的所有數據? –

+0

您需要爲Word文件格式(.doc或.docx)編寫解析器。這並不容易。 – SLaks

回答

0

您可以使用MS Office主互操作程序集訪問Word文檔的對象模型。嘗試在Visual Studio中添加程序集引用(像Office 12或Microsoft Word 12等)。檢查出this link。那裏有一些基礎知識。