如何使用python3制作unicode字符串


99

我用这个:

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

但是Python 3出现了错误(或者...也许我只是忘了包含一些东西):

NameError: global name 'unicode' is not defined

谢谢。


17
如果有很棒的理由升级到python 3,则默认情况下为unicode。
JBernardo

Answers:


137

在Python3中,文字字符串默认为unicode。

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

unicode的Python2等效str于Python3,因此您还可以编写:

str(text, 'utf-8')

若你宁可。


58
TypeError:不支持解码str
Gank

9
@Gank,在Python3中str是unicode,即。它是“解码”,所以它是没有意义的调用decode就可以了
约翰·拉ROOY

相同的TypeError。请只替换为str(txt)或下面@magicrebirth中的代码
Simon,

3
原始样本不清楚。因此,在python3中,如果要执行操作str(text, 'utf-8'),则文本必须是字符串二进制。例如str(b'this is a binary', 'utf-8')
killua8p

10

Python 3.0的新功能说:

所有文本均为Unicode;但是编码的Unicode表示为二进制数据

如果您想确保输出的是utf-8,请参考以下页面中unicode 3.0版本的示例:

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

1
这正是我们在Python 2中对'\ x80abc'.decode(“ utf-8”,“ strict”)的需求,谢谢
workplaylifecycle

9

作为一种解决方法,我一直在使用:

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

12
为什么要使用lambda函数?在任何情况下,都以相同的方式调用这些方法。这是一个更简单的变体: try: unicode = str; except: pass
Nicolas Bouliane

1
看来您可以做,unicode = str因为它不会在2或3失败
Nickolai

还是from six import u as unicode我更喜欢它,仅仅是因为它比unicode = str
Nickolai '18年

3

这就是我解决问题的方式,例如将\ uFE0F,\ u000A等字符转换为16字节编码的表情符号。

example = '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', 'surrogatepass').decode('utf-16')
print(new_new_str)
>>> 'raw vegan chocolate cocoa pie w chocolate & vanilla cream😍😍❤️ Present Moment Cafè in St.Augustine❤️❤️ '

0

在我使用多年的Python 2程序中,有以下一行:

ocd[i].namn=unicode(a[:b], 'utf-8')

这在Python 3中不起作用。

但是,该程序最终可用于:

ocd[i].namn=a[:b]

我不记得为什么将unicode放在首位,但是我认为这是因为该名称可以包含瑞典字母åäöÅÄÖ。但是,即使它们没有“ unicode”也可以工作。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.