【发布时间】: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