web-dev-qa-db-fra.com

Python chaîne en unicode

Duplicate possible:
Comment traiter une chaîne ASCII comme unicode et décompresser les caractères échappés qu'elle contient en python?
Comment convertir une séquence d'échappement Unicode en caractères Unicode dans un python chaîne

J'ai une chaîne qui contient des caractères Unicode, par exemple. \u2026 Etc. D'une manière ou d'une autre, cela ne m'est pas reçu sous la forme unicode, mais sous la forme d'un str. Comment le reconvertir en unicode?

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

Donc, clairement unicode(a) n'est pas la réponse. Alors qu'est-ce que c'est?

53
prongs

Les échappements Unicode ne fonctionnent que dans des chaînes Unicode.

 a="\u2026"

est en fait une chaîne de 6 caractères: '\', 'u', '2', '0', '2', '6'.

Pour en faire unicode, utilisez decode('unicode-escape'):

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

## '\\u2026'
## u'\u2026'
75
georg

Décodez-le avec le codec unicode-escape:

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

En effet, pour une chaîne non-unicode, \u2026 N'est pas reconnu mais est traité à la place comme une série de caractères littéraux (pour le dire plus clairement, 'Hello\\u2026'). Vous devez décoder les échappements et le codec unicode-escape Peut le faire pour vous.

Notez que vous pouvez obtenir que unicode le reconnaisse de la même manière en spécifiant l’argument du codec:

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

Mais la méthode a.decode() est plus agréable.

26
Chris Morgan
>>> a="Hello\u2026"
>>> print a.decode('unicode-escape')
Hello…
16
jamylak