Python - 阅读表情符号Unicode字符

时间:2015-07-07 22:16:26

标签: python python-2.7 unicode emoji

我有一个Python 2.7程序,它从SQLite数据库中读取iOS文本消息。文本消息是unicode字符串。在以下文字信息中:

u'that\u2019s \U0001f63b'

撇号由\u2019表示,但表情符号由\U0001f63b表示。我查找了有问题的表情符号的代码点,它是\uf63b。我不确定0001的来源。我对字符编码很少了解。

当我逐字符地打印文本时,使用:

s = u'that\u2019s \U0001f63b'

for c in s:
    print c.encode('unicode_escape')

程序产生以下输出:

t
h
a
t
\u2019
s

\ud83d
\ude3b

如何在Python中正确读取这些最后的字符?我在这里正确使用编码吗?我是否应该在阅读之前尝试删除这些0001,或者是否有更容易,更不傻的方式?

2 个答案:

答案 0 :(得分:18)

我认为您没有正确使用编码,也不需要。你拥有的是一个有效的unicode字符串,其中包含一个4位和一个8位数的转义序列。在OS X中的REPL中尝试这个

>>> s = u'that\u2019s \U0001f63b'
>>> print s
that’s 

在python3中,尽管 -

Python 3.4.3 (default, Jul  7 2015, 15:40:07) 
>>> s  = u'that\u2019s \U0001f63b'
>>> s[-1]
''

答案 1 :(得分:3)

您最后的困惑可能是因为您正在运行所谓的“窄Python构建”。 Python无法容纳具有足够信息的单个字符来容纳单个表情符号。最好的解决方案是迁移到Python 3.否则,尝试处理UTF-16 surrogate pair