web-dev-qa-db-ja.com

UnicodeEncodeError: 'ascii'コーデックは文字u '\ xe4'をエンコードできません

次のエラーが永久に発生します。

_UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 27: ordinal not in range(128)
_

私はすでに試しました

  1. x.encode("ascii", "ignore")
  2. x.encode("utf-8")
  3. x.decode("utf-8")

ただし、何も機能しません。

18
toom

ソースでこのエンコーディングがどのエンコーディングにあるかを発見する必要があります。

これはISO-8859-1(ヨーロッパ言語)だと思います。その場合は "ä"ですが、確認する必要があります。キリル文字またはギリシャ語の場合もあります。

このエンコーディングの文字の完全なリストについては、 http://en.wikipedia.org/wiki/ISO/IEC_8859-1 を参照してください。

この情報を使用して、Pythonに変換を依頼できます。

Python 2.7

>>> s = '\xe4'
>>> t = s.decode('iso-8859-1')
>>> print t
ä
>>> for c in t:
...   print ord(c)
...
228
>>> u = t.encode('utf-8')
>>> print u
ä
>>> for c in bytes(u):
...   print ord(c)
...
195
164

文字列tは、PythonのISO-8859-1で内部的にエンコードされます。文字列uは内部的にUTF-8でエンコードされており、その文字はUTF-8では2バイトを使用します。 print命令は、これらの異なるエンコーディングを表示する方法を「知っている」ことにも注意してください。

12
Mickaël Bucas