Facebook/messenger 存档包含我无法解析的表情符号

Facebook/messenger archive contains emoji that I am unable to parse

我不知道如何解码 facebook 在 Messenger 存档中编码表情符号的方式。

大家好, 我正在尝试编写一个方便的实用程序来使用 PYTHON.

浏览 Messenger 的存档文件

邮件的文件是 "badly encoded "JSON 并且如其他 post 中所述:

使用 .encode('latin1').decode('utf8) 我已经能够处理大多数字符,例如“é”或“à”并正确显示它们。但是我很难使用表情符号,因为它们似乎是以不同的方式编码的。

有问题的表情符号示例:\u00f3\u00be\u008c\u00ba

encoding/decoding 不会产生任何错误,但 Tkinter 不愿意显示函数输出的内容并给出“_tkinter.TclError:字符 U+fe33a 超出范围(U+0000- U+FFFF) Tcl 允许”。 Tkinter 还没有想到这个问题,因为尝试在控制台中显示相同的表情符号会产生“󾺔,这显然不是应该显示的内容(它应该是一张哭脸)

我试过使用表情符号库,但它似乎没有任何帮助

>>> print(emoji.emojize("\u00f3\u00be\u008c\u00ba"))
'ó¾º'

如何检索并显示正确的表情符号? 如果这不可能,我如何才能检测到有问题的表情符号,以便首先清理并从 JSON 中删除它们?

提前致谢

.encode('latin1').decode('utf8) 是正确的 - 它导致代码点 U+fe33a("")。这个代码点位于私人使用区 (PUA)(具体来说 Supplemental Private Use Area-A),因此每个人都可以为该代码点分配自己的含义(也许 facebook 想使用哭脸,当时 Unicode 中还没有,所以他们使用了 PUA?)。

Google 搜索该字符 (https://www.google.com/search?q=) 使 google 自动更正为 U+1f62d ("") - 遗憾的是我不知道 google 如何映射 U+fe33aU+1f62d.

谷歌搜索 U+fe33a site:unicode.org gives https://unicode.org/L2/L2010/10132-emojidata.pdf,其中将 U+1F62D 列为提议的官方代码点。

由于来自 unicode 的文档将 U+fe33a 列为 google 使用的代码点,因此我搜索了 android old emoji codepoints pua。除其他外,还有两个实际可用的结果:

  1. - 问题链接到:
  2. https://github.com/googlei18n/noto-emoji/issues/115 - 此线程链接到:

我在答案中包含了我的搜索查询,因为我发现的结果在任何方面都不具有权威性 - 但它应该足以让您的工具正常工作:-)