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')