我使用了以下代码:
u = unicode(text, 'utf-8')
但是在 Python 3 中出现错误(或者可能我忘记包含某些内容):
NameError: global name 'unicode' is not defined
谢谢。
我使用了以下代码:
u = unicode(text, 'utf-8')
但是在 Python 3 中出现错误(或者可能我忘记包含某些内容):
NameError: global name 'unicode' is not defined
谢谢。
在Python3中,字面字符串默认为Unicode。
假设text
是一个bytes
对象,只需使用text.decode('utf-8')
即可。
Python2中的unicode
与Python3中的str
相当,因此您也可以写成:
str(text, 'utf-8')
如果你喜欢的话。
str
是Unicode,也就是说它已经被“解码”,因此调用decode
没有意义。 - John La Rooystr(text, 'utf-8')
,则text必须是一个字符串二进制类型。例如:str(b'this is a binary', 'utf-8')
- killua8pPython 3.0的新特性中提到:
所有文本都是Unicode;但编码后的Unicode以二进制数据形式表示。
如果您想确保输出utf-8,可以参考3.0版本中有关Unicode的页面上的示例:
b'\x80abc'.decode("utf-8", "strict")
作为解决方案,我一直在使用以下方法:
# Fix Python 2.x.
try:
UNICODE_EXISTS = bool(type(unicode))
except NameError:
unicode = lambda s: str(s)
try: unicode = str; except: pass
. - nicbouunicode = str
,因为它在2或3中都不会失败。 - Nickolaifrom six import u as unicode
更好,因为它更易于自我说明(因为six是一个2/3兼容层),而不是使用 unicode = str
。 - Nickolaiexample = 'raw vegan chocolate cocoa pie w chocolate & vanilla cream\\uD83D\\uDE0D\\uD83D\\uDE0D\\u2764\\uFE0F Present Moment Caf\\u00E8 in St.Augustine\\u2764\\uFE0F\\u2764\\uFE0F '
import codecs
new_str = codecs.unicode_escape_decode(example)[0]
print(new_str)
>>> 'raw vegan chocolate cocoa pie w chocolate & vanilla cream\ud83d\ude0d\ud83d\ude0d❤️ Present Moment Cafè in St.Augustine❤️❤️ '
new_new_str = new_str.encode('utf-16', errors='surrogatepass').decode('utf-16')
print(new_new_str)
>>> 'raw vegan chocolate cocoa pie w chocolate & vanilla cream❤️ Present Moment Cafè in St.Augustine❤️❤️ '
ocd[i].namn=unicode(a[:b], 'utf-8')
在 Python 3 中,这行代码无法正常工作。
然而,经过调试后,发现程序可以使用以下方法实现:
ocd[i].namn=a[:b]
我不记得为什么一开始要放Unicode,但我想可能是因为名称中包含瑞典字母åäöÅÄÖ。但即使没有"unicode",它们也可以工作。
text.encode('unicode_escape')
应该就足够了。 - Ritwik