Python конвертирует latin1 в UTF8

Как в Python 2.7 преобразовать строку latin1 в UTF-8.

Например, я пытаюсь преобразовать é в utf-8.

>>> "é"
'\xe9'
>>> u"é"
u'\xe9'
>>> u"é".encode('utf-8')
'\xc3\xa9'
>>> print u"é".encode('utf-8')
é

Буква é — это СТРОЧНАЯ ЛАТИНСКАЯ БУКВА E С ОСТРОЙ (U+00E9) Кодировка байта UTF-8 для: c3a9
Кодировка байта на латинице: e9

Как получить версию латинской строки в кодировке UTF-8? Может ли кто-нибудь привести пример того, как преобразовать é?


person Eugene    schedule 21.01.2013    source источник
comment
Вы уже прочитали Python Unicode HOWTO? Если нет, то вы должны!   -  person Martijn Pieters    schedule 21.01.2013
comment
@MartijnPieters У меня есть, но кодирование всегда немного сбивает с толку.   -  person Eugene    schedule 21.01.2013


Ответы (3)



>>> u"é".encode('utf-8')
'\xc3\xa9'

У вас есть последовательность байтов в кодировке UTF-8. Не пытайтесь печатать закодированные байты напрямую. Чтобы распечатать их, вам нужно декодировать закодированные байты обратно в строку Unicode.

>>> u"é".encode('utf-8').decode('utf-8')
u'\xe9'
>>> print u"é".encode('utf-8').decode('utf-8')
é

Обратите внимание, что кодирование и декодирование являются противоположными операциями, которые эффективно компенсируют друг друга. В итоге вы получите исходную строку u"é", хотя Python выводит ее как эквивалент u'\xe9'.

>>> u"é" == u'\xe9'
True
person John Kugelman    schedule 21.01.2013

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

Я делаю это, я не уверен, что это хороший подход, но он работает каждый раз!

person Shashank Agarwal    schedule 24.11.2014