在python 3中将表情符号转换为Unicode,反之亦然

imc*_*imc 10 python unicode formatting emoji

我试图将表情符号转换为python 3中的Unicode.例如,我将使用表情符号,并希望获得相应的unicode"U + 1F600".同样我想将'U + 1F600'转换回来.现在我已经阅读了文档并尝试了几个选项,但是pythons行为让我感到困惑.

>>> x = ''
>>> y = x.encode('utf-8')
>>> y
b'\xf0\x9f\x98\x80'
Run Code Online (Sandbox Code Playgroud)

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

>>> z = y.decode('utf-8')
>>> z
''
Run Code Online (Sandbox Code Playgroud)

将字节对象转换回表情符号,到目前为止一直很好.

现在,为表情符号取unicode:

>>> c = '\U0001F600'
>>> d = c.encode('utf-8')
>>> d
>>> b'\xf0\x9f\x98\x80'
Run Code Online (Sandbox Code Playgroud)

这会再次打印出字节编码.

>>> d.decode('utf-8')
>>> ''
Run Code Online (Sandbox Code Playgroud)

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

PM *_*ing 16

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

s = ''
print('U+{:X}'.format(ord(s)))
Run Code Online (Sandbox Code Playgroud)

产量

U+1F600
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Python 3.6+,则可以使用f-string使其更短(更高效):

s = ''
print(f'U+{ord(s):X}')
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果你想创建一个Unicode转义序列像'\U0001F600'还有的'unicode-escape'编解码器.但是,它返回一个bytes字符串,您可能希望将其转换回文本.您可以使用'UTF-8'编解码器,但您也可以使用'ASCII'编解码器,因为它保证只包含有效的ASCII.

s = ''
print(s.encode('unicode-escape'))
print(s.encode('unicode-escape').decode('ASCII'))
Run Code Online (Sandbox Code Playgroud)

产量

b'\\U0001f600'
\U0001f600
Run Code Online (Sandbox Code Playgroud)

我建议你看一下Stack Overflow联合创始人Joel Spolsky 这篇简短的文章绝对最低限度每个软件开发人员,绝对必须知道Unicode和字符集(没有借口!).