В Python 2.7, как вы преобразуете строку из latin1 в UTF-8.

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

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

Буква Е - ЛАТИНСКОЕ МАЛЕНЬКОЕ ПИСЬМО Е С ОСТРЫМ (U + 00E9) Кодировка байтов UTF-8 для: c3a9
Латинская байтовая кодировка: e9

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

12
Eugene 21 Янв 2013 в 21:11

3 ответа

Лучший ответ

Чтобы декодировать последовательность байтов из латинского 1 в Unicode, используйте {{X0} } метод:

>>> '\xe9'.decode('latin1')
u'\xe9'

Python использует \xab экранирование для кодовых точек Юникода ниже \u00ff.

>>> '\xe9'.decode('latin1') == u'\u00e9'
True

Вышеуказанный символ Latin-1 может быть закодирован в UTF-8 как:

>>> '\xe9'.decode('latin1').encode('utf8')
'\xc3\xa9'
10
Martijn Pieters 21 Янв 2013 в 17:22
>>> 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
3
John Kugelman 21 Янв 2013 в 17:16

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

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

0
Shashank Agarwal 24 Ноя 2014 в 18:15