我有一个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
,或者是否有更容易,更不傻的方式?
答案 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。