¿Alguien sabe cómo Facebook codifica emoji con pares altamente sustituidos en Graph API?
Parejas bajas sustitutas parecen estar bien. Por ejemplo, ❤️ (HEAVY BLACK HEART, aunque es rojo en iOS / OSX, enlace a imagen si no puedes ver el emoji ) aparece como \u2764\ufe0f
que parece coincidir con los códigos hexadecimales UTF-16 / ” Notación formal de Unicode “que se muestra aquí en iemoji.com .
Y de hecho, en Ruby al analizar la salida JSON de la API:
ActiveSupport::JSON.decode('"\u2764\ufe0f"')
usted correctamente obtiene:
"❤️"
Sin embargo, para elegir otro emoji, 💤 (SÍMBOLO DE DORMIR, enlace a la imagen aquí . Facebook devuelve \udbba\udf59
. Esto parece no corresponder con nada que pueda encontrar en ningún recurso Unicode, por ejemplo, este en iemoji.com .
Y cuando bash decodificar en Ruby usando el mismo método anterior:
ActiveSupport::JSON.decode('"\udbba\udf59"')
Yo obtengo:
"💤"
¿Alguna idea de lo que está pasando aquí?
Respondiendo a mi propia pregunta, aunque la mayor parte del crédito pertenece a @bobince por mostrarme el camino en los comentarios anteriores.
La respuesta es que Facebook codifica emoji usando la encoding “Google” como se ve en esta tabla Unicode .
He creado una gem ruby llamada emojivert que se puede convertir de una encoding a otra, incluso de “Google” a “Unified”. Se basa en otro proyecto existente llamado rails-emoji .
Por lo tanto, el ejemplo anterior se solucionaría haciendo:
string = ActiveSupport::JSON.decode('"\udbba\udf59"') > "💤" fixed = Emojivert.google_to_unified(string) > "💤"