2011-12-26 23 views
27

Quiero convertir un Emoji a un carácter Unicode en IOS 5.iOS 5: ¿Cómo convertir un Emoji a un personaje Unicode?

Por ejemplo, la conversión de smiling face with open mouth and cold sweat a \ue415.

Fui a NSStringEncoding en NSString Class Reference.

En IOS 4, NSUTF16BigEndianStringEncoding y NSUTF32BigEndianStringEncoding me dio <e415> y <0000e415>, respectivamente, que son bastante cerca de lo que quiero.

En iOS 5, los resultados son diferentes. Otorga <d83dde04> y <0001f604>.

¿Cómo puedo obtener \ue415 para smiling face with open mouth and cold sweat en iOS 5? Gracias.

Respuesta

14

\ue415 es parte de la codificación heredada de emoji y es específica de ciertos operadores japoneses. SoftBank, NTT y docomo tenían sus propios conjuntos de caracteres emoji privados.

iOS 5 se ha movido al soporte de Unicode 6.0 recién especificado para planos de caracteres emoji y <0001f604>es el punto de código Unicode para ese carácter. La entrada de la wikipedia sobre esto hace referencia a un archivo de mapeo de EmojiSources.txt que necesitará usar para hacer la asignación usted mismo si realmente necesita obtener los viejos códigos de caracteres de uso privado.

http://en.wikipedia.org/wiki/Emoji

+1

Sí, deseo de utilizar la codificación legado de Emoji porque parece que mi aplicación no lo haría trabajar con el nuevo Unicode 6.0, puede leer '\ ue415' pero no' \ U0001f604'. ¿Podría mostrarme cómo usar el archivo de asignación _EmojiSources.txt_ que proporcionó? – Protocole

+1

otro 1 es http://arashnorouzi.wordpress.com/2011/08/31/adding-graphics-and-emoji-characters-to-apple-push-notifications/ – GameLoading

4

si su emoji no realiza un viaje de ida y vuelta (desde ios a un servidor backend y de regreso a ios), entonces no debería tener ningún problema ios (al menos 4.2+) maneja la codificación correctamente y no lo hace Tengo que hacer cualquier cosa. pero si su aplicación interactúa con un servidor, ¿sospecha que el valor de retorno del servidor es incorrecto? es decir, json codificado incorrecto.

que tenían el mismo problema, después de cavar durante horas y finalmente que esta respuesta es que funciona para mí: https://stackoverflow.com/a/8339255/1090945

Si está utilizando los carriles como su servidor, esto es todo lo que necesita hacer. No es necesario hacer nada en ios/xcode, simplemente pase el NSString sin hacer ningún tipo de codificación UTF8/16 en el servidor.

Postegre almacena el código correctamente, es justo cuando envías la respuesta json a tu cliente ios, suponiendo que ejecutas json: @message, la codificación json tiene un problema.

usted podría probar si usted está teniendo problemas JSON codificación en sus carriles de la consola al hacer la prueba tan simple en su consola

test = {"smiley"=>"u{1f604}"} 

test.to_json

si se imprime "{\" smiley \ ": \" \ uf604 \ "}" (observe que el 1 está perdido), entonces tiene este problema. y el parche del enlace lo arreglará.

90

Por favor, intente esto:

  1. Convertir Emoji a Unicode

    NSData *data = [strEmo dataUsingEncoding:NSNonLossyASCIIStringEncoding]; 
    NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    
  2. muy fácil de convertir a Unicode Emoji

    NSData *data = [strEmo dataUsingEncoding:NSUTF8StringEncoding]; 
    NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding]; 
    
+1

¿Cómo podría mostrar los caracteres Emoji en el formato correcto? –

+0

Me interesa saber la respuesta para recuperar los caracteres ... – fvisticot

+1

Esta solución junto con la de @yadav funciona muy bien en todas las versiones de iOS. Pero tengo un requisito específico que tiene que almacenar las cadenas en un servidor y permite la búsqueda de cadenas. En este caso, los caracteres que no son emoji no deberían codificarse en '\ u ...', lo que hace que toda la cadena no sea legible y que la máquina no pueda buscarse. ¿Hay alguna forma de hacer conversiones solo para personajes que no sean emojis? –

7

convertir de nuevo a: -

NSData *newdata=[recievedstring dataUsingEncoding:NSUTF8StringEncoding 
allowLossyConversion:YES]; 
    NSString *mystring=[[NSString alloc] initWithData:newdata encoding:NSNonLossyASCIIStringEncoding]; 
7

dispalying emoji en UILabel:

NSString *bellEmojiString = @"U+1F514"; 

label.text = [NSSting stringWithFormat:@"Table: %@", @"\U0001F514"]; 

usted debe tener cuidado reemplazar + con 3 zero dígitos

+0

no funciona para cadenas de Emoji como U + 26F5 – Liangjun

Cuestiones relacionadas