Как преобразовать escape-последовательности Unicode в символы Unicode в строке Python - PullRequest
27 голосов
/ 13 июня 2009

Когда я пытался получить содержимое тега, используя «unicode (head.contents [3])», я получаю вывод, похожий на этот: «Christensen Sk \ xf6ld». Я хочу, чтобы escape-последовательность была возвращена в виде строки. Как это сделать на питоне?

Ответы [ 3 ]

29 голосов
/ 14 июня 2009

Предполагая, что Python видит имя как обычную строку, вам сначала нужно будет декодировать его в Unicode:

>>> name
'Christensen Sk\xf6ld'
>>> unicode(name, 'latin-1')
u'Christensen Sk\xf6ld'

Другой способ достижения этого:

>>> name.decode('latin-1')
u'Christensen Sk\xf6ld'

Обратите внимание на «u» перед строкой, указывая, что она не закодирована. Если вы распечатаете это, письмо с акцентом будет отображаться правильно:

>>> print name.decode('latin-1')
Christensen Sköld

Кстати: когда это необходимо, вы можете использовать метод de "encode", чтобы превратить Unicode в, например, строка UTF-8:

>>> name.decode('latin-1').encode('utf-8')
'Christensen Sk\xc3\xb6ld'
8 голосов
/ 23 августа 2012

С учетом байтовой строки с экранированием Unicode b"\N{SNOWMAN}", b"\N{SNOWMAN}".decode('unicode-escape) создаст ожидаемую строку Unicode u'\u2603'.

7 голосов
/ 13 июня 2009

Я подозреваю, что он работает правильно. По умолчанию Python отображает строки в кодировке ASCII, поскольку не все терминалы поддерживают Unicode. Если вы действительно печатаете строку, она должна работать. Смотрите следующий пример:

>>> u'\xcfa'
u'\xcfa'
>>> print u'\xcfa'
Ïa
...