[英]How to verify xml encoding
我正在嘗試解析在公司內部創建的XML文件。 該文件應該是UTF-16編碼的,但是我正在編寫的Python腳本出現錯誤(請參見下文)。 我試圖找出問題出在文件還是腳本。 有沒有辦法驗證編碼? 我所有的搜索都以XML驗證工具或檢查格式正確的XML的工具結束。 我希望嘗試使用XMLSpy,但目前無法訪問它。
引發錯誤的代碼是“ parser.parse”行(Python 2.7):
from xml.sax import make_parser
from xml.sax.handler import ContentHandler
import codecs
parser = make_parser()
curHandler = XmlHandler()
parser.setContentHandler(curHandler)
parser.parse(codecs.open(infile, 'rb', fileEncoding))
其中“ infile”是有問題的XML文件,在這種情況下,“ fileEncoding”是“ UTF-16”。
該腳本在UTF-8編碼的文件上工作正常。 但是使用UTF-16文件時,出現以下錯誤:
xml.sax._exceptions.SAXParseException: XmlFile.xml:1:30: encoding specified in XML declaration is incorrect
抱歉,我無法發布XML。 它並不復雜,但是包含來自多個外國的單詞/名稱。 我目前的懷疑是編碼為UTF-8,但編碼屬性設置為UTF-16。 有沒有辦法驗證這一點?
更新:好的。 所以現在我很困惑。 我將XML文件上的編碼更改為UTF-8而不是UTF-16,但是忘記在腳本上進行更改。 該腳本按預期運行。 因此,文件encoding ='UTF-8'但打開時帶有:
parser.parse(codecs.open(infile, 'rb', 'UTF-16'))
正常工作,沒有錯誤。
更多信息:我正在Win7 / Server 2008環境中進行開發/執行。
為自己准備一個HEX編輯器(或編寫一個程序來轉儲輸入文件的前八個字節)。
0x3C
(UTF-8), 0x003C
(UTF-16)或可能但不完全是0x0000003C
(UTF-32)(XML序言的開頭<
字符)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.