2011-07-25 60 views
55

我用这个:如何使unicode字符串与python3

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

但得到错误与Python 3(或...也许我只是忘了,包括东西):

NameError: global name 'unicode' is not defined 

谢谢。

+14

如果有一个很好的理由升级到python 3它默认是unicode。 – JBernardo

回答

77

文字字符串是系统默认的Unicode在Python3

假设文本是一个bytes对象,只需使用text.decode('utf-8')

Python2的unicode相当于Python3 str,所以你也可以写

str(text, 'utf-8') 

如果您愿意

+14

TypeError:不支持解码str – Gank

+4

@Gank,在Python3中'str'是unicode,即。它是“解码”的,所以在它上面调用'decode'是没有意义的 –

+0

Same TypeError。请使用str(txt)或@magicrebirth的代码替换下面的 – Simon

5

What's new in Python 3.0说:

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

如果你想确保你输出UTF-8,这里是从这个页面上unicode in 3.0一个例子:

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

,这正是Python 2中'\ x80abc'.decode(“utf-8”,“strict”)所需要的,谢谢 – hylepo

8

作为一种变通方法,我一直在使用这样的:

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

为什么你使用lambda函数?在任何情况下,这些方法都以相同的方式调用。这是一个更简单的变化: 'try:unicode = str;除了:pass'。 –