作者:幸运的天使棒棒糖_634 | 来源:互联网 | 2023-01-05 18:22
我试图将表情符号转换为python 3中的Unicode.例如,我将使用表情符号,并希望获得相应的unicode"U + 1F600".同样我想将'U + 1F600'转换回来.现在我已经阅读了文档并尝试了几个选项,但是pythons行为让我感到困惑.
>>> 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和表情符号之间进行转换.
1> PM 2Ring..:
''已经是一个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}')
顺便说一句,如果你想创建一个Unicode转义序列像'\U0001F600'
还有的'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和字符集(没有借口!).