Python: преобразование из ISO-8859-1/latin1 к UTF-8
У меня есть эта строка, которая была декодирована из Quoted-printable в ISO-8859-1 с модулем электронной почты. Это дает мне строки типа "xC4pple", которые будут соответствовать" Äpple " (Apple на шведском языке). Однако, я не могу преобразовать эти строки в 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)
Что делать?
5 ответов:
это распространенная проблема, поэтому вот относительно тщательная иллюстрация.
для строк без Юникода (т. е. без
uпрефикс какu'\xc4pple'), необходимо декодировать из собственной кодировки (iso8859-1/latin1, если изменено с загадочнымsys.setdefaultencodingи своя логика кодирования, установленоsys.stdout.encodingи по умолчанию UTF-8нужно расшифровать a strв unicode перед преобразованием в другую кодировку.конечно, все это меняется в Python 3.x.
надеюсь, что это освещает.
далее чтение
- символы и Байт, Тим Брэй.
и очень показательные разглагольствования Армина Ронахера:
декодировать в Юникод, кодировать результаты в UTF8.
яблоко.декодирования('латинских типа 1').encode ('utf8')