poner para los emojis descargar como cambiar ios json character-encoding emoji

los - emojis ios 11 para android



Los caracteres Emoji no se pueden codificar en JSON (6)

Algo que hay que tener en cuenta con Emoji: si tu json encoder está configurado para producir salida ASCII (es decir, usando el formato de caracteres / u <4 hex dígitos>), algunos caracteres Emoji se romperán porque usan más de dos bytes y por lo tanto no t caben en los 4 dígitos hexadecimales permitidos.

Entonces, en python, por ejemplo, asegúrese de usar:

json.dumps(<object containing emoji strings>, ensure_ascii=False)

Tengo una UITextView que llamo messageField . Los datos dentro de ese messageField están POST -ed al servidor en formato JSON. Cuando el usuario escribe un carácter Emoji, tengo problemas para codificar los datos en JSON . Estoy pensando que Emoji usa la codificación Unicode.

¿Hay alguna forma de codificar un personaje Emoji en JSON? ¿Y de vuelta de JSON a Emoji para mostrar en un UILabel ?


Uso el siguiente código para codificar caracteres emoji

NSString *uniText = [NSString stringWithUTF8String:[textview.text UTF8String]]; NSData *msgData = [uniText dataUsingEncoding:NSNonLossyASCIIStringEncoding]; NSString *goodMsg = [[NSString alloc] initWithData:msgData encoding:NSUTF8StringEncoding] ;

Y el siguiente código para decodificar y mostrar en UILabel

const char *jsonString = [body UTF8String]; NSData *jsonData = [NSData dataWithBytes:jsonString length:strlen(jsonString)]; NSString *goodMsg = [[NSString alloc] initWithData:jsonData encoding:NSNonLossyASCIIStringEncoding];


Gracias @Karu, editando su respuesta, uso este código:

Codificar para enviar al servidor:

NSString *uniText = [NSString stringWithUTF8String:[text_to_send UTF8String]]; NSData *msgData = [uniText dataUsingEncoding:NSNonLossyASCIIStringEncoding]; NSString *str = [[NSString alloc] initWithData:msgData encoding:NSUTF8StringEncoding];

Decodificar para recibir y mostrar texto de emoji:

NSData *newdata = [received_string dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; NSString *mystring = [[NSString alloc] initWithData:newdata encoding:NSNonLossyASCIIStringEncoding]; NSString *finalString= @""; if (mystring) { finalString = mystring; }else{ finalString = received_string; }

Este código funciona perfecto en iOS 9


Actualizar Swift & Objective C

Si quieres enviar un envío de emojis a través de JSON, primero necesitas formatear DB a UTF-8 Y en IOS necesitas codificar para NSUTF8StringEncoding. Así que primero asegúrese de que su formato de base de datos para UTF-8 luego codifique los parámetros para NSUTF8StringEncoding.So aquí hay una solicitud de muestra al enviar el mensaje.

let post:NSString = parameters! let url:NSURL = NSURL(string: serverURL!)! let postData:NSData = post.dataUsingEncoding(NSUTF8StringEncoding)! // Change Here let postLength:NSString = String( postData.length ) let request:NSMutableURLRequest = NSMutableURLRequest(URL: url) request.HTTPMethod = "POST" request.HTTPBody = postData request.setValue(postLength as String, forHTTPHeaderField: "Content-Length") request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") request.setValue("*/*", forHTTPHeaderField: "Accept") return request

Pero no es necesario decodificar a NSUTF8StringEncoding en iOS. Porque de acuerdo con la documentación de Apple decodifica 5 codificaciones.

Los datos deben estar en una de las 5 codificaciones compatibles enumeradas en la especificación JSON: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE. Los datos pueden tener o no una lista de materiales. La codificación más eficiente para usar para el análisis sintáctico es UTF-8, por lo que si tiene la opción de codificar los datos pasados ​​a este método, use UTF-8.

https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSJSONSerialization_Class/#//apple_ref/occ/clm/NSJSONSerialization/JSONObjectWithData:options:error :


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

Si está utilizando rieles 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 hagas json: @message, la codificación json tiene un problema.

usted podría probar si está teniendo un problema de codificación json en la consola de sus rieles haciendo una prueba simple:

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

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


Editar - 2016-03-03 Tenga en cuenta que esta respuesta se escribió en 2011 y ya no es relevante.

Los caracteres Emoji son solo una fuente específica utilizada para representar puntos de código Unicode específicos. iOS usa una de las áreas de uso privado de Unicode para puntos de código específicos de Emoji. La única forma de ver estos "personajes" como Emoji es tener una fuente de Emoji disponible, así como una máquina que sepa cómo pasar de la fuente de texto predeterminada (como Helvetica) a la fuente de emoji.

No sé cómo está codificando su JSON, pero dado que los Emoji son solo texto, no debería haber ningún problema siempre que transporte el texto en un formato compatible con Unicode, como UTF-8 o UTF-16. No lo verá en el lado del servidor o en la base de datos (a menos que vea los datos con los requisitos previos anteriores), pero debería poder devolver los mismos bytes sin procesar y debería tener el mismo aspecto.

Aquí hay algunas publicaciones que podrían ayudar un poco más: