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.
我有一个 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.