2011-11-15 19 views
6

Estoy creando una aplicación que habla con un nodojs-server usando sockets y JSON, y dado que iOS 5 tiene su propia NSJSONSerialización, pensé que ese podría ser el camino hacia seguir. Antes, usaba la biblioteca ligera de Yail.NSJSONSerialization y Unicode, no funcionarán bien juntos

De todos modos, después de la migración a NSJSONSerialization empecé a encontrarse con un problema con la codificación, antes del cambio, el carácter Ö enviaría muy bien con el servidor y la espalda, aún siendo Ö, pero ahora, NSJSONSerialization deja Ö todavía en una charla Unicode es decir, \U00f6.

Al leer la documentación, se dice que los objetos JSON se convierten a UTF8 de manera predeterminada. Y cuando convierto la respuesta del servidor a un simple NSString, el Ö aparece como se esperaba, pero todavía está en JSON, por supuesto.

Por favor, ayúdenme con sus ideas y, ¿debo volver a Yail o utilizar NSJSONSerialization integrado?

Gracias, Simon

+0

¿Puede explicar cómo ha determinado que 'NSJSONSerialization' aún deja' \ U00f6' en las cadenas resultantes? En mi prueba, se decodifica correctamente a 'ö'. ¿Estás seguro de que no estás confundiendo la representación '-description' predeterminada del' NSDictionary'/'NSArray' resultante con ella, sin decodificar realmente el resultado? – wulong

+0

¿qué quieres decir? haciendo un simple 'NSLog (@"% @ ", [NSJSONSerialization JSONObjectWithData: data options: 0 error: &err]);' salidas del diccionario con una cadena con unicode descodificado, es decir, '\ U00f6'. – Simon

+1

Es posible que la forma en que NSLog elige representar el personaje está con el código de escape en lugar del carácter real para mantener limpio el registro. ¿Está conectando el objeto de datos directamente desde una biblioteca de red a NSJSONSerialization? ¿Puede publicar algún código de muestra? –

Respuesta

3

NSLog llama a la descripción sobre sus argumentos, que imprimen el código Unicode en lugar del propio carácter. Pruebe por ejemplo:

NSLog(@"%@", [NSDictionary dictionaryWithObject:@"ö" forKey:@"hello"]); 

Y verá que imprime

{ 
    hello = "\U00f6"; 
} 

Por lo tanto, es probable, que su decodificación JSON se ha hecho bien.

0

JSONSerialization sólo se puede usar con ciertos tipos: NSString, NSNumber, NSArray, NSDictionary o NSNull solamente por defecto ... si es necesario utilizar otros objetos en su JSON, me recomendamos usar https://github.com/johnezang/JSONKit

Cuestiones relacionadas