Перевод строки Python в юникод

У меня есть строка, которая содержит символы юникода, например, \u2026 и т.д. Почему-то она не принимается как unicode, а принимается как str. Как мне преобразовать ее обратно в юникод?

>>> a="Hello\u2026"
>>> b=u"Hello\u2026"
>>> print a
Hello\u2026
>>> print b
Hello…
>>> print unicode(a)
Hello\u2026
>>> 

Итак, очевидно, что unicode(a) - это не ответ. Тогда что же?

Комментарии к вопросу (1)
Решение

Эскапады Юникода работают только в строках Юникода, так что это

 a="\u2026"

на самом деле является строкой из 6 символов: '\', 'u', '2', '0', '2', '6'.

Чтобы сделать из этого юникод, используйте decode('unicode-escape'):

a="\u2026"
print repr(a)
print repr(a.decode('unicode-escape'))

## '\\u2026'
## u'\u2026'
Комментарии (0)

Декодируйте его с помощью кодека unicode-escape:

>>> a="Hello\u2026"
>>> a.decode('unicode-escape')
u'Hello\u2026'
>>> print _
Hello…

Это происходит потому, что для неюникодной строки \u2026 не распознается, а рассматривается как буквальная серия символов (чтобы выразить это более ясно, 'Hello\\\u2026'). Вам нужно декодировать эскейпы, и кодек unicode-escape может сделать это за вас.

Обратите внимание, что вы можете заставить unicode распознать его таким же образом, указав аргумент codec:

>>> unicode(a, 'unicode-escape')
u'Hello\u2026'

Но способ a.decode() приятнее.

Комментарии (0)
>>> a="Hello\u2026"
>>> print a.decode('unicode-escape')
Hello…
Комментарии (0)