2011-11-01 17 views
5

me he dado cuenta de que emojis en mi aplicación han dejado de mostrar adecuadamente en un UIWebView en IOS 5.Emoji y UIWebView en IOS 5

Todos los personajes están codificados para HTML cuando se muestran y la salida HTML es:

<p>Emoji (iOS 4): &#55357;&#56850;</p> 

Este UTF-8 codificado HTML se procesa de forma correcta en un UIWebView en iOS 4, pero no en 5:

enter image description here

entiendo que hay han habido algunos cambios en iOS 5 con respecto a los emoji, pero el carácter emoji que se ha codificado en & # 55357; & # 56850; se generó en iOS 5, por lo que los caracteres de 2 bytes deben ser correctos. No se han producido otros cambios en el código, por lo que definitivamente es algo introducido en iOS 5.

Cualquier consejo sería muy apreciado y con mucho gusto proporcionaré más información si es necesario. Gracias.

Respuesta

10

He tenido un response from the developer forums:

El analizador HTML en IOS 5 y Safari 5.1 ha cambiado, y las referencias de caracteres en el rango 0xD800..0xDFFF (55296..57343) son tratados como errores de análisis y producir un personaje de reemplazo de objeto (que normalmente se representa como un diamante con un signo de interrogación). Este cambio en el comportamiento es consistente con lo que HTML5 especifica. Esto significa que ya no puede codificar caracteres utilizando referencias de personajes de par sustituto.

Una solución relativamente simple es utilizar una referencia de un solo carácter en lugar de un par suplente. En su ejemplo, en lugar de (0xD83D, 0xDE12), use 0x1F612. Puede usar hexadecimal o decimal:

& # x1f612; o & # 128530;

Esto explica el motivo del problema. Sin embargo, trabajé en torno al problema al codificar solo un subconjunto más pequeño de caracteres, ya que el documento HTML está en modo Unicode.