【发布时间】:2016-11-03 23:23:49
【问题描述】:
这是Converting to Emoji 的后续行动。在那个问题中,OP 有一个json.dumps() 编码的文件,其中一个表情符号表示为代理对 - \ud83d\ude4f。他/她在读取文件和正确翻译表情符号时遇到问题,正确的 answer 是文件中的每一行 json.loads(),json 模块将处理从代理对转换回 (I' m 假设 UTF8 编码)表情符号。
这就是我的情况:假设我只有一个普通的 Python 3 unicode 字符串,其中包含一个代理对:
emoji = "This is \ud83d\ude4f, an emoji."
如何处理此字符串以从中获取emoji 的表示形式?我希望得到这样的东西:
"This is ????, an emoji."
# or
"This is \U0001f64f, an emoji."
我试过了:
print(emoji)
print(emoji.encode("utf-8")) # also tried "ascii", "utf-16", and "utf-16-le"
json.loads(emoji) # and `.encode()` with various codecs
通常我会收到类似于UnicodeEncodeError: XXX codec can't encode character '\ud83d' in position 8: surrogates no allowed 的错误。
我在 Linux 上运行 Python 3.5.1,$LANG 设置为 en_US.UTF-8。我已经在命令行的 Python 解释器和在 Sublime Text 中运行的 IPython 中运行了这些示例 - 似乎没有任何区别。
【问题讨论】:
-
tweepy(我猜通常是 Twitter)似乎正在这样做。在这里提一下,希望更多谷歌搜索这个问题能找到这个答案。
标签: python python-3.x unicode surrogate-pairs