Python xml.saxは、強調された文字の解析の問題

次のコードは、よく知られている「UnicodeDecodeError: 'ascii' codec can not decode」エラーを引き起こします。

import xml.sax
import io
parser = xml.sax.make_parser()
parser.parse(io.StringIO(u'é'))

import xml.sax
parser = xml.sax.make_parser()
parser.parse(open('foo'))

(ファイル "foo"のコンテンツは é です)。

私はファイルではなく私の場合にXML文字列を解析する必要があります。

私の問題に対する解決策はありますか?ありがとう。

4

1 答え

ファイルにはバイトが含まれており、Unicode文字を格納するためのエンコーディングが必要です。そのため、 BytesIO オブジェクト代わりに:

#coding: utf8
import xml.sax 
import io 
parser = xml.sax.make_parser() 
parser.parse(io.BytesIO(u'é'.encode('utf8')))

注: #coding:utf8 ソースファイルのエンコーディングを指定します。 .encode( 'utf8')は、 BytesIO オブジェクトに格納されるUnicode文字列のエンコーディングを指定します。技術的に非Unicode文字列を使用する:

#coding: utf8
parser.parse(io.BytesIO('é'))

バイト文字列はすでにソースファイルのエンコーディングに含まれていますが、意図がより明確になるため、同様に動作します。ソースファイルと BytesIO エンコーディングは異なる場合があります。

2
追加された