会社で内部的に作成された 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-16 ではなく UTF-8 に変更しましたが、スクリプトで変更するのを忘れていました。スクリプトは期待どおりに実行されました。したがって、ファイル encoding='UTF-8' ですが、次のように開きました:
parser.parse(codecs.open(infile, 'rb', 'UTF-16'))
エラーなしで期待どおりに動作します。
詳細情報: Win7/Server 2008 環境で開発/実行しています。