1

lxmlを使用してXMLファイル(UTF-8でエンコードされ、で始まる)を反復処理しようとしていますが、文字丂で次のエラーが発生します。

UnicodeEncodeError:'cp932'コーデックは位置0の文字u'\ u4e02'をエンコードできません:不正なマルチバイトシーケンス

この前の他の文字は正しく印刷されます。コードは次のとおりです。

parser = etree.XMLParser(encoding='utf-8')
tree = etree.parse("filename.xml", parser)
root = tree.getroot()
for elem in root:
    print elem[0].text

エラーは、ファイルをutf-8で解析せず、代わりにシフトJISで解析したことを意味しますか?

4

2 に答える 2

2

lxml の objectify を使用して同様の状況が発生しました。これが私がそれを修正できた方法です。

import unicodedata
my_name = root.name.text
if isinstance(my_name, unicode):
    # Decode to string.
    my_name = unicodedata.normalize('NFKD', my_name).encode('ascii','ignore')
于 2013-10-08T21:33:15.307 に答える
2

UnicodeEncodeError例外が発生した場所へのポイントのスタック トレース。残念ながら、それを含めませんでしたが、Unicode テキストが stdout に出力される最後の行である可能性が最も高いです。システムで stdout がエンコーディングを使用していると仮定しcp932ます。

私の仮定が正しければ、stdout が Unicode 文字 (UTF-8 など) を表現できるエンコーディングを使用するように、環境を変更することを検討する必要があります。(たとえば、 Python で sys.stdout を介してユニコード文字列を書き込むを参照してください)。

于 2012-12-07T15:28:12.297 に答える