2012-04-22 10 views
48

Powiel możliwe:
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 stringPython ciąg Unicode

Mam ciąg, który zawiera znaki Unicode na przykład \u2026 itp. Jakoś nie jest odbierany jako unicode, ale jest odbierany jako str. Jak przekonwertować go z powrotem do Unicode?

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

Tak więc nie jest to odpowiedź unicode(a). Więc co to jest?

+1

Znacznik tak mówi, ale aby wyraźniej zaznaczyć, to pytanie koncentruje się na python 2.x, nie 3.x. – Adam

Odpowiedz

68

Unicode ucieka pracować tylko w Unicode strun, więc

a="\u2026" 

jest rzeczywiście ciąg 6 znaków: '\', 'U', '2', '0', '2', ' 6 '.

Aby unicode z tego korzystać decode('unicode-escape'):

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

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

dekodować go z kodekiem unicode-escape:

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

To dlatego na sznurku non-unicode \u2026 nie jest rozpoznawany, ale jest traktowane jako literalna seria znaków (aby wyrazić to bardziej szczegółowo, 'Hello\\u2026'). Musisz dekodować ucieczki, a kodek unicode-escape może to dla ciebie zrobić.

pamiętać, że można dostać unicode rozpoznać go w taki sam sposób, określając kodeka argumentu:

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

Ale sposób a.decode() jest ładniejszy.

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