如何用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。

假设textbytes 对象,只需使用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字符串的主要内容,如果未能解决你的问题,请参考以下文章

[Python3]String(字符串)

python3中各个字符编码的转换

如何用两行制作 UILabel 或 UIButton ,第一行有一个字符,第二个有两个字符?

Vim 用 unicode 字符替换

JAVA如何用一串16进制来初始化一个字符串对象

如何用字符串填充数组?