2013-08-19 58 views
2

我有一個xml文件。當我用Emacs打開它時,它會顯示中文字符(請參閱附件)。這發生在使用Emacs和記事本的Windows 7 PC上,也發生在我的Windows XP上(參見圖A)。圖B是A如果我打開xml文件,Emacs顯示中文字符

enter image description here

的hexl模式如果我使用一個collegue的Windows XP的PC,並用記事本打開該文件沒有中國的字符,但一個奇怪的字符的字符。我將它保存爲txt文件並通過電子郵件發送到我的Windows7-PC(參見圖C)。奇怪的字符被替換爲「?」。 (由於限制,我無法使用我的同事的電腦,並與奇怪的字符重現記事本文件)。

我的問題:似乎XML文件中存在造成問題的字符。我不知道該如何應對。有沒有人有一個想法如何我可以解決這個問題?它與編碼有關嗎?感謝提示。

回答

4

按照圖B,它看起來像這個文件是用big-endian和little-endian UTF-16的混合編碼的。它以fe ff開頭,這是大寫字母UTF-16的字節順序標記,XML聲明(<?xml version=...)也是big-endian,但以<report開頭的部分是小端。你可以看出,因爲這些字母出現在十六進制顯示的第一部分的偶數位置上,但在下一個奇數位置出現。

另外,在<report之前有一個空字符(編碼爲兩個字節,00 00)。在XML文檔中不允許空字符。

但是,由於一些XML元素在圖A中正確顯示,似乎通過該文件發生混淆。該文件已損壞,這可能需要手動解決。

如果在文件中沒有非ASCII字符,我會嘗試在Emacs打開該文件作爲二進制(M-x revert-buffer-with-coding-system並指定binary),刪除所有空字節(M-% C-q [email protected] RET RET),保存文件,並希望最好。

另一種可能的解決方案是標記每個區域有中國特色的顯現和與M-x recode-region重新編寫它,讓「文本是真正在」爲utf-16-le和「卻被解釋爲」爲utf-16-be

+0

非常感謝您的回答。第一次嘗試(回覆緩衝區)給了我很多^ @,第二次(重新編碼區域)做到了。這意味着我嘗試獲得一個非損壞的文件。感謝您的輸入,我可以向我從中獲取文件的人提供一些提示。 – giordano

+1

xml文件的生產者說編碼utf-16會產生這個問題(正如觀察到的那樣)。更改爲utf-8後,xml文件可讀。顯然,譯碼是一個主要問題。遺憾的是,當文件被共享時,具有這種效果的東西不會相互交流。 – giordano