如何用python3制作unicode字符串
Posted
技术标签:
【中文标题】如何用python3制作unicode字符串【英文标题】:How to make unicode string with python3 【发布时间】:2011-10-12 07:49:26 【问题描述】:我用过这个:
u = unicode(text, 'utf-8')
但是 Python 3 出现错误(或者......也许我只是忘了包含一些东西):
NameError: global name 'unicode' is not defined
谢谢。
【问题讨论】:
如果有一个很棒的理由升级到 python 3,它默认是 unicode。text.encode('unicode_escape')
我猜就够了
【参考方案1】:
在 Python3 中,文字字符串默认为 unicode。
假设text
是bytes
对象,只需使用text.decode('utf-8')
Python2的unicode
相当于Python3的str
,所以也可以这样写:
str(text, 'utf-8')
如果你愿意的话。
【讨论】:
TypeError: 不支持解码 str @Gank,在 Python3 中,str
是 unicode,即。它已“解码”,因此在其上调用 decode
毫无意义
相同类型错误。请用 str(txt) 或下面@magicrebirth 的代码替换
原样不清楚。所以在python3中,如果你想做str(text, 'utf-8')
,文本必须是字符串二进制。例如str(b'this is a binary', 'utf-8')
【参考方案2】:
What's new in Python 3.0 说:
所有文本都是 Unicode;但是编码的 Unicode 表示为二进制 数据
如果您想确保输出的是 utf-8,以下是此页面上 unicode in 3.0 的示例:
b'\x80abc'.decode("utf-8", "strict")
【讨论】:
这正是我们在 Python 2 中 '\x80abc'.decode("utf-8", "strict") 所需要的,谢谢【参考方案3】:作为一种解决方法,我一直在使用这个:
# Fix Python 2.x.
try:
UNICODE_EXISTS = bool(type(unicode))
except NameError:
unicode = lambda s: str(s)
【讨论】:
为什么要使用 lambda 函数?这些方法在任何情况下都以相同的方式调用。这是一个更简单的变体:try: unicode = str; except: pass
.
看来你可以只做unicode = str
,因为它不会在 2 或 3 中失败【参考方案4】:
这就是我解决问题的方法,可以转换 \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❤️❤️ '
【讨论】:
【参考方案5】:python 3.x中最简单的方法
text = "hi , I'm text"
text.encode('utf-8')
【讨论】:
【参考方案6】:在我使用多年的 Python 2 程序中,有这样一行:
ocd[i].namn=unicode(a[:b], 'utf-8')
这在 Python 3 中不起作用。
但是,结果证明该程序可以使用:
ocd[i].namn=a[:b]
我不记得为什么我首先将 unicode 放在那里,但我认为这是因为该名称可以包含瑞典字母 åäöÅÄÖ。但即使它们在没有“unicode”的情况下也能工作。
【讨论】:
以上是关于如何用python3制作unicode字符串的主要内容,如果未能解决你的问题,请参考以下文章