2012-04-22 16 views
48

thể trùng lặp:
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 chuỗi Unicode

Tôi có một chuỗi chứa ký tự unicode ví dụ \u2026 vv Bằng cách nào đó, nó không được nhận cho tôi là unicode, nhưng được nhận dưới dạng str. Làm thế nào để chuyển đổi nó trở lại unicode?

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

Vì vậy, rõ ràng unicode(a) không phải là câu trả lời. Vậy cái gì?

+1

Thẻ nói như vậy, nhưng để chỉ ra rõ ràng hơn, câu hỏi này tập trung vào python 2.x, chứ không phải 3.x. – Adam

Trả lời

68

Unicode thoát chỉ có tác dụng trong chuỗi unicode, vì vậy đây

a="\u2026" 

thực sự là một chuỗi 6 ký tự: '\', 'u', '2', '0', '2', ' 6 '.

Để làm unicode ra điều này, sử dụng decode('unicode-escape'):

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

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

Giải mã nó với unicode-escape codec:

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

Đây là bởi vì đối với một chuỗi không unicode các \u2026 không được công nhận nhưng thay vào đó được coi là một chuỗi ký tự theo nghĩa đen (để đặt nó rõ ràng hơn, 'Hello\\u2026'). Bạn cần giải mã các lần thoát và codec unicode-escape có thể làm điều đó cho bạn.

Lưu ý rằng bạn có thể nhận unicode để nhận ra nó trong cùng một cách bằng cách xác định đối số codec:

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

Nhưng cách a.decode() là đẹp hơn.

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