在Python 3中将表情符号转换为Unicode以及反向转换。

26
我正在尝试在Python 3中将表情符号转换为其Unicode表示。例如,我有一个表情符号,并希望得到相应的Unicode 'U+1F600'。同样,我想将'U+1F600'转换回表情符号。我已经阅读了文档并尝试了几个选项,但是Python的行为使我感到困惑。
>>> x = ''
>>> y = x.encode('utf-8')
>>> y
b'\xf0\x9f\x98\x80'

表情符号被转换为字节对象。

>>> z = y.decode('utf-8')
>>> z
''

将字节对象转换回表情符号,目前为止一切顺利。

现在,获取表情符号的 Unicode 编码:

>>> c = '\U0001F600'
>>> d = c.encode('utf-8')
>>> d
>>> b'\xf0\x9f\x98\x80'

这将再次打印出字节编码。

>>> d.decode('utf-8')
>>> ''

这将再次打印出表情符号。我真的无法弄清如何仅在Unicode和表情符号之间进行转换。

2个回答

45

''已经是Unicode对象。UTF-8不是Unicode,它是Unicode的字节编码。要获取Unicode字符的代码点编号,可以使用 ord函数。要以所需形式打印它,您可以将其格式化为十六进制。就像这样:

s = ''
print('U+{:X}'.format(ord(s)))

输出

U+1F600
如果您有Python 3.6+,可以使用f-string使其更短(并且更有效率):
s = ''
print(f'U+{ord(s):X}')

顺便提一下,如果您想创建类似于 '\U0001F600' 的 Unicode 转义序列,可以使用 'unicode-escape' 编解码器。然而,它返回的是一个 bytes 字符串,你可能希望将其转换回文本。您可以使用 'UTF-8' 编解码器来实现,但由于该字符串保证只包含有效的 ASCII,因此您也可以使用 'ASCII' 编解码器。

s = ''
print(s.encode('unicode-escape'))
print(s.encode('unicode-escape').decode('ASCII'))

输出

b'\\U0001f600'
\U0001f600
我建议您阅读Stack Overflow联合创始人Joel Spolsky的这篇短文《有关Unicode和字符集绝对必须知道的最低限度(不容任何借口!)》The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

3
sentence = "Head-Up Displays (HUD) for #automotive sector\n \nThe #UK-based #startup Envisics got €42 million #funding from l… "
print("normal sentence - ", sentence)

uc_sentence = sentence.encode('unicode-escape')
print("\n\nunicode represented sentence - ", uc_sentence)

decoded_sentence = uc_sentence.decode('unicode-escape')
print("\n\ndecoded sentence - ", decoded_sentence)

输出

normal sentence -  Head-Up Displays (HUD) for #automotive sector
 
The #UK-based #startup Envisics got €42 million #funding from l… 


unicode represented sentence -  b'Head-Up Displays (HUD)\\U0001f4bb for #automotive\\U0001f697 sector\\n \\nThe #UK-based #startup\\U0001f680 Envisics got \\u20ac42 million #funding\\U0001f4b0 from l\\u2026 '


decoded sentence -  Head-Up Displays (HUD) for #automotive sector
 
The #UK-based #startup Envisics got €42 million #funding from l… 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接