2012-04-22 30 views
48

Eventuali duplicati:
How do I treat an ASCII string as unicode and unescape the escaped characters in it in python?
How do convert unicode escape sequences to unicode characters in a python stringstringa di Python per Unicode

ho una stringa che contiene caratteri Unicode per esempio \u2026 ecc. In qualche modo non mi viene ricevuto come unicode, ma viene ricevuto come str. Come posso convertirlo nuovamente in Unicode?

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

Quindi chiaramente unicode(a) non è la risposta. Allora cos'è?

+1

Il tag dice così, ma per indicare più chiaramente, questa domanda è incentrata su python 2.x, non 3.x. – Adam

risposta

68

Unicode sfugge funzionano solo nelle stringhe Unicode, quindi questo

a="\u2026" 

è in realtà una stringa di 6 caratteri: '\', 'u', '2', '0', '2', ' 6' .

Per rendere unicode fuori da questo, utilizzare decode('unicode-escape'):

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

## '\\u2026' 
## u'\u2026' 
24

decodificarlo con la unicode-escape codec:

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

Questo perché per una stringa non Unicode il \u2026 non è riconosciuto, ma è invece trattato come una serie letterale di personaggi (per dirla più chiaramente, 'Hello\\u2026'). Devi decodificare gli escape e il codec unicode-escape può farlo per te.

Nota che si può ottenere unicode per riconoscerlo nello stesso modo specificando l'argomento codec:

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

Ma il modo a.decode() è più bello.

16
>>> a="Hello\u2026" 
>>> print a.decode('unicode-escape') 
Hello… 
Problemi correlati