【问题标题】:Facebook/messenger archive contains emoji that I am unable to parseFacebook/messenger 存档包含我无法解析的表情符号
【发布时间】:2019-12-23 21:56:26
【问题描述】:

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

大家好, 我正在尝试编写一个方便的实用程序来使用 PYTHON 探索 messenger 的存档文件。

消息的文件是“编码错误”的 JSON,如另一篇文章所述:Facebook JSON badly encoded

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

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

编码/解码不会产生任何错误,但 Tkinter 不愿意显示函数输出的内容并给出“_tkinter.TclError: character U+fe33a is above the range (U+0000-U+FFFF) allowed by Tcl”。 Tkinter 还没有想到这个问题,因为尝试在控制台中显示相同的表情符号会产生“󾺔,这显然不是应该显示的(应该是哭脸)

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

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

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

提前谢谢你

【问题讨论】:

标签: python facebook unicode character-encoding emoji


【解决方案1】:

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

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

搜索U+fe33a site:unicode.org 会得到https://unicode.org/L2/L2010/10132-emojidata.pdf,其中列出了U+1F62D 作为提议的官方代码点。

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

  1. How to get Android emoji code point - 问题链接到:
  2. https://github.com/googlei18n/noto-emoji/issues/115 - 此线程链接到:

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

【讨论】:

    猜你喜欢
    • 2019-11-05
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2015-12-22
    相关资源
    最近更新 更多