【问题标题】:How does Facebook encode emoji in the json Graph API?Facebook 如何在 json Graph API 中编码表情符号?
【发布时间】:2013-12-01 10:54:35
【问题描述】:

有谁知道 Facebook 如何在 Graph API 中使用高代理对编码表情符号?

低代理对似乎很好。例如,❤️(HEAVY BLACK HEART,虽然它在 iOS/OSX 中是红色的,link to image if you can't see the emoji)通过 \u2764\ufe0f 出现,这似乎与 iemoji.com 显示的 UTF-16 十六进制代码/“正式 Unicode 表示法”匹配.

事实上,在 Ruby 中解析来自 API 的 JSON 输出时:

ActiveSupport::JSON.decode('"\u2764\ufe0f"')

你正确得到:

"❤️"

但是,要选择另一个表情符号,???? (睡眠符号,link to image here。Facebook 返回 \udbba\udf59。这似乎与我在任何 unicode 资源上找不到的任何内容对应,例如 this one at iemoji.com

当我尝试使用上述相同的方法在 Ruby 中解码时:

ActiveSupport::JSON.decode('"\udbba\udf59"')

我明白了:

"????"

知道这里发生了什么吗?

【问题讨论】:

  • \u2764\ufe0f 不是代理对,它是一个普通的基本多语言平面字符,后跟一个变体选择器。在 Unicode 6.2 中使用变体来尝试区分表情符号何时应呈现为彩色图标是一个丑陋的新增功能。 \udbba\udf59 似乎确实是一个错误...相应的代码点 U+FEB59 是您不应该得到的私人使用字符。
  • 没有“高代理对”和“低代理对”。有效的代理对(在 UTF-16 中)由一个低代理和一个高代理(按此顺序)组成。第一个示例中的字符都不是代理项。
  • 我显然不太了解这一点,无法使用正确的语言。任何 unicode 看起来像 U+2764 的表情符号都可以使用。但是看起来像U+1F4A4(注意1)的不是。
  • @bobince U+FEB59 是一个线索。根据unicode.org 上的此页面,它是“Google”编码。那么,对于该表的“建议”编码,Facebook 使用的是“Google”版本,这就是答案吗?
  • @philoye:啊!很好,我完全忘记了该提案中的临时代码点......奇怪的是有人实际使用它,但我猜 Facebook 一定是在 Unicode 6.0 之前的那个不确定时期实现了表情符号。您可以从emoji4unicode获取映射数据

标签: ruby facebook facebook-graph-api unicode emoji


【解决方案1】:

回答我自己的问题,虽然大部分功劳属于@bobince,因为他在上面的 cmets 中向我展示了道路。

答案是 Facebook 使用“Google”编码对表情符号进行编码,如 Unicode table 所示。

我创建了一个名为 emojivert 的 ruby​​ gem,它可以从一种编码转换为另一种编码,包括从“Google”转换为“Unified”。它基于另一个名为 rails-emoji 的现有项目。

因此,上面的失败示例将通过以下方式解决:

string = ActiveSupport::JSON.decode('"\udbba\udf59"')
> "?"
fixed = Emojivert.google_to_unified(string)
> "?"

【讨论】:

  • 表链接为 404 :/
  • 实际上是403 Forbidden,不知道为什么。我无法在其他任何地方找到原件,唉。我想知道 Facebook 是否仍在使用这种编码。
  • @philoye 看看this。另外,根据对this question 的最后评论,我认为他们不再使用它了。
猜你喜欢
  • 2014-12-23
  • 1970-01-01
  • 2012-02-08
  • 2011-11-02
  • 2014-09-24
  • 2013-07-18
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
相关资源
最近更新 更多