1. ホーム
  2. python

[解決済み] Python Unicode エンコードエラー

2022-10-06 20:15:06

質問

Amazon XMLファイルを読み込んでパースしているのですが、XMLファイルには「 」が表示されているのに、それを印刷しようとすると次のようなエラーが表示されます。

'ascii' codec can't encode character u'\u2019' in position 16: ordinal not in range(128) 

私がこれまでオンラインで読んだところでは、エラーはXMLファイルがUTF-8であるという事実から来ていますが、PythonはそれをASCIIエンコード文字として扱いたいのです。エラーをなくし、私のプログラムが読み込んだXMLを印刷させる簡単な方法はありますか?

どのように解決するのですか?

おそらく、あなたの問題は、あなたがそれをうまくパースし、今、あなたはXMLの内容を印刷しようとしている、あなたはいくつかの外国語のUnicode文字があるため、できないことです。 まず、Unicode 文字列を ascii としてエンコードしてみてください。

unicodeData.encode('ascii', 'ignore')

のように、'ignore'の部分は、これらの文字をスキップするように指示します。 Pythonのドキュメントより。

>>> # Python 2: u = unichr(40960) + u'abcd' + unichr(1972)
>>> u = chr(40960) + u'abcd' + chr(1972)
>>> u.encode('utf-8')
'\xea\x80\x80abcd\xde\xb4'
>>> u.encode('ascii')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
UnicodeEncodeError: 'ascii' codec can't encode character '\ua000' in position 0: ordinal not in range(128)
>>> u.encode('ascii', 'ignore')
'abcd'
>>> u.encode('ascii', 'replace')
'?abcd?'
>>> u.encode('ascii', 'xmlcharrefreplace')
'&#40960;abcd&#1972;'

この記事を読むとよいでしょう。 http://www.joelonsoftware.com/articles/Unicode.html を読むと、何が起こっているのかについての基本的なチュートリアルとして非常に役に立つと思います。 この記事を読めば、どのコマンドを使うべきか推測しているように感じなくなるはずです(少なくとも私はそうでした)。