Python - 读取表情符号 Unicode 字符

Python - Reading Emoji Unicode Characters

我有一个 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 丢弃,还是有更简单、不那么愚蠢的方法?

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

>>> 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]
''

你最后的困惑可能是因为你是 运行 所谓的 "narrow Python build"。 Python 无法容纳具有足够信息的单个字符来容纳单个表情符号。最好的解决方案是移动到 Python 3。否则,尝试处理 UTF-16 surrogate pair.