簡體   English   中英

如何驗證xml編碼

[英]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編輯器(或編寫一個程序來轉儲輸入文件的前八個字節)。

  1. 在開始時查找字節順序標記 (BOM)。 如果在那里,那就是您的編碼。
  2. 否則,您應該看到0x3C (UTF-8), 0x003C (UTF-16)或可能但不完全是0x0000003C (UTF-32)(XML序言的開頭<字符)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM