2

会社で内部的に作成された 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 環境で開発/実行しています。

4

1 に答える 1

1

HEX エディターを入手します (または、入力ファイルの最初の 8 バイトをダンプするプログラムを作成します)。

  1. 最初のバイト オーダー マーク(BOM) を探します。そこにある場合、それはあなたのエンコーディングです。
  2. それ以外の場合は0x3C、(UTF-8)、0x003C(UTF-16)、またはおそらく0x0000003C(UTF-32) ( <XML プロローグの開始文字) が表示されるはずです。
于 2013-07-08T21:45:04.853 に答える