2012-03-30 19 views
5

Cuando un carácter Emoji se establece con el siguiente código:¿Por qué no se puede mostrar Emoji correctamente en un UITextField?

self.textField.text = @"\ue415"; 

Sólo se muestran como un cuadrado. Pero cuando ingreso un Emoji desde el teclado, se visualiza correctamente. ¿Cuál es el problema?

PS: Estoy usando IOS 5,1

Text View with Emoji Characters

+2

Echa un vistazo a mi respuesta en: http://stackoverflow.com/questions/9886903/iphone-how-to-write-symbol-on-a-label/9887028#9887028 – Devang

+1

Encontré la solución. En ios5.1, debe usar Unicode 6.0, aquí están las asignaciones entre caracteres Unicode 6.0 y caracteres de Softbank PUA: http://opensource.apple.com/source/ICU/ICU-461.13/icuSources/data/translit/Any_SoftbankSMS. txt – yakexi

+3

la solución: self.textField.text = @ "\ U0001F604"; – yakexi

Respuesta

2

En las versiones anteriores de iOS los caracteres Emoji estaban todos en el área de uso privado de Unicode, que como su nombre indica es un conjunto de Unicode puntos de código que explícitamente no tienen ningún carácter asociado. Sin embargo, el estándar Unicode se ha actualizado para incluir una gran cantidad de caracteres Emoji, por lo que iOS ahora usa estos, al igual que Mac OS X.

Puede ver una lista de todos los Emoji Unicode en los gráficos de códigos en www .unicode.org/charts eg http://www.unicode.org/charts/PDF/U1F600.pdf y estos también te dicen qué representa cada Emoji en realidad.

Ninguno de los Unicode Emoji se encuentran en el plano multilingüe básico de la especificación Unicode, lo que significa que son demasiado grandes para caber en un único iOS unichar. Entonces, cuando se almacenan en un NSString, cada emoji cubrirá varios unichars, algo a tener en cuenta si intenta iterar sobre los caracteres en una cadena.

Si usted tiene un código como

NSString *emoji [email protected]"\U0001F604"; 
NSString *ascii = @"A"; 
NSLog(@"emoji.length %d, ascii.length %d", emoji.length, ascii.length); 

Usted verá esto en la salida

2013-03-08 14:42:22.841 test[23980:c07] emoji.length 2, ascii.length 1 

donde la cara sonriente sola CON LA BOCA ABIERTA Y SONRISA OJOS emoji es dos unichars largo, no una como podríamos esperar

Cuestiones relacionadas