小编Jar*_*red的帖子

为什么Python 2认为这些字节是麦克风表情符号,而Python 3却不呢?

我在数据库中有一些数据,该数据是用户输入的“ BTS ??> BTS”,即“ BTS” +棒球表情+“> BTS” +麦克风表情。当我从数据库中读取它,对其进行解码并在Python 2中进行打印时,它会正确显示表情符号。但是,当我尝试在Python 3中解码相同的字节时,它会以失败UnicodeDecodeError

Python 2中的字节:

>>> data
'BTS\xe2\x9a\xbe\xef\xb8\x8f>BTS\xed\xa0\xbc\xed\xbe\xa4'
Run Code Online (Sandbox Code Playgroud)

将它们解码为UTF-8会输出以下unicode字符串:

>>> 'BTS\xe2\x9a\xbe\xef\xb8\x8f>BTS\xed\xa0\xbc\xed\xbe\xa4'.decode('utf_8')
u'BTS\u26be\ufe0f>BTS\U0001f3a4'
Run Code Online (Sandbox Code Playgroud)

在Mac上打印该unicode字符串会显示棒球和麦克风表情符号:

>>> print u'BTS\u26be\ufe0f>BTS\U0001f3a4'
BTS??>BTS
Run Code Online (Sandbox Code Playgroud)

但是在Python 3中,解码与UTF-8相同的字节会给我一个错误:

>>> b'BTS\xe2\x9a\xbe\xef\xb8\x8f>BTS\xed\xa0\xbc\xed\xbe\xa4'.decode('utf_8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position 13: invalid continuation byte
Run Code Online (Sandbox Code Playgroud)

特别是最后6个字节(麦克风表情符号)似乎有点问题:

>>> b'\xed\xa0\xbc\xed\xbe\xa4'.decode('utf_8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position 0: invalid continuation …
Run Code Online (Sandbox Code Playgroud)

python unicode python-2.x python-3.x emoji

4
推荐指数
1
解决办法
87
查看次数

标签 统计

emoji ×1

python ×1

python-2.x ×1

python-3.x ×1

unicode ×1