Кто-нибудь знает, как Facebook кодирует эможи с парами с высоким суррогатом в Graph API?Как Facebook кодирует emoji в json Graph API?
Низкие суррогатные пары выглядят отлично. Например, ❤️ (HEAVY BLACK HEART, хотя оно красное в iOS/OSX, link to image if you can't see the emoji) появляется как \u2764\ufe0f
, который, по-видимому, соответствует шестнадцатеричным кодам UTF-16/«Официальная нотация Unicode», показанному здесь, в iemoji.com.
И действительно, в Ruby, при анализе вывода JSON из API:
ActiveSupport::JSON.decode('"\u2764\ufe0f"')
вы правильно получить:
"❤️"
Однако, чтобы выбрать другой смайликов, (СПАТЬ СИМВОЛ, link to image here Facebook. возвращает \udbba\udf59
.Это, кажется, соответствует ничто, что я могу найти в любых ресурсах юникода, например, this one at iemoji.com.
И когда я пытаюсь расшифровать в Ruby, используя тот же метод выше:
ActiveSupport::JSON.decode('"\udbba\udf59"')
я получаю:
""
Любая идея, что здесь происходит?
'\ u2764 \ ufe0f' не суррогатная пара, это нормальный характер Basic Multilingual Plane затем селектор вариации. Используя вариант, чтобы попытаться отличить, когда emoji должен отображаться как цветные значки, это уродливое новое дополнение в Unicode 6.2. '\ udbba \ udf59', похоже, является ошибкой, хотя ... соответствующий кодовый пример U + FEB59 является символом частного использования, которого вы не должны получать. – bobince
Нет «пар с высоким суррогатом» и нет «низких суррогатных пар». Действительные суррогатные пары (в UTF-16) состоят из одного низкого суррогата и одного высокого суррогата (в указанном порядке). Ни один из символов в вашем первом примере не является суррогатом. –
Я явно не понимаю этого достаточно хорошо, чтобы использовать правильный язык. Любой символ emoji, в котором работает юникод, выглядит как 'U + 2764'. Но тот, который выглядит как 'U + 1F4A4' (примечание 1), нет. – philoye