2011-07-25 39 views
55

Tôi sử dụng này:Làm thế nào để làm cho chuỗi unicode với python3

u = unicode(text, 'utf-8') 

Nhưng nhận lỗi với Python 3 (hoặc ... có lẽ tôi chỉ quên bao gồm một cái gì đó):

NameError: global name 'unicode' is not defined 

Cảm ơn bạn .

+14

Nếu có lý do tuyệt vời để nâng cấp lên python 3, đó là unicode theo mặc định. – JBernardo

Trả lời

77

chuỗi Literal là unicode theo mặc định trong Python3

Giả sử văn bản được một đối tượng bytes, chỉ cần sử dụng text.decode('utf-8')

unicode của python2 tương đương với str trong Python3, vì vậy bạn cũng có thể viết

str(text, 'utf-8') 

nếu bạn thích

+14

LoạiError: giải mã str không được hỗ trợ – Gank

+4

@Gank, Trong Python3 một 'str' là unicode, tức là. nó được "giải mã" vì vậy nó không có ý nghĩa để gọi 'giải mã' trên nó –

+0

Cùng một loại lỗi. Vui lòng chỉ thay thế bằng str (txt) hoặc mã từ @magicrebirth bên dưới – Simon

5

What's new in Python 3.0 nói:

All text is Unicode; however encoded Unicode is represented as binary data

Nếu bạn muốn đảm bảo bạn đang cung cấp utf-8, sau đây là một ví dụ từ trang này trên unicode in 3.0:

b'\x80abc'.decode("utf-8", "strict") 
+1

đây chính xác là những gì chúng tôi cần cho '\ x80abc'.decode ("utf-8", "strict") trong Python 2, cảm ơn – hylepo

8

Là một workaround, tôi đã sử dụng này:

# Fix Python 2.x. 
try: 
    UNICODE_EXISTS = bool(type(unicode)) 
except NameError: 
    unicode = lambda s: str(s) 
+4

Tại sao bạn sử dụng hàm lambda? Những phương pháp này được gọi là cùng một cách trong mọi trường hợp. Đây là một biến thể đơn giản: 'try: unicode = str; ngoại trừ: pass'. –

Các vấn đề liên quan