web-dev-qa-db-ja.com

Python:ISO-8859-1 / latin1からUTF-8への変換

電子メールモジュールでQuoted-printableからISO-8859-1にデコードされたこの文字列があります。これにより、「Äpple」(スウェーデン語ではApple)に対応する「\ xC4pple」のような文字列が得られます。ただし、これらの文字列をUTF-8に変換することはできません。

>>> Apple = "\xC4pple"
>>> Apple
'\xc4pple'
>>> Apple.encode("UTF-8")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in     range(128)

私は何をすべきか?

79
Zyberzero

最初にデコードしてからエンコードしてください:

Apple.decode('iso-8859-1').encode('utf8')
107
Mat

Python 3の場合:

bytes(Apple,'iso-8859-1').decode('utf-8')

Utf-8ではなくiso-8859-1(VeÅ\x99ejnéなどの単語を表示)として誤ってエンコードされたテキストにこれを使用しました。このコードは正しいバージョンを生成しますVeřejné

16
Michal Skop

Unicodeにデコードし、結果をUTF8にエンコードします。

Apple.decode('latin1').encode('utf8')
10
jd.
concept = concept.encode('ascii', 'ignore') 
concept = MySQLdb.escape_string(concept.decode('latin1').encode('utf8').rstrip())

私はこれを行います、それが良いアプローチであるかどうかはわかりませんが、それは常に機能します!!

0