iOS – NSJSONSerialization: no se puede convertir datos en caracteres de cadena

Recibo este error mientras analizo JSON:

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn't be completed. (Cocoa error 3840.)" (Unable to convert data to string around character 73053.) UserInfo=0x1d5d8250 {NSDebugDescription=Unable to convert data to string around character 73053.} 

¿Alguna sugerencia de cómo solucionar esto?

AGREGADO Como dice en el informe de error, el analizador no puede pasar por el personaje en la position 73053, que es "ø" en mi respuesta JSON. Hasta donde sé, los caracteres como Ø, Å, etc. no deberían ser un problema para los analizadores json.

Compruebe que los datos que está parsing son realmente válidos JSON (y no solo "casi" JSON). Se sabe que ese error ocurre cuando tiene un formatting de datos diferente que no puede analizarse como JSON. Ver por ejemplo:

Resultados de análisis JSON de iOS 5 en el error de cocoa 3840

¿También tiene un contenedor de nivel superior en su JSON? Una matriz o dictionary. Ejemplo:

 { "response" : "Success" } 

Actualizar

La encoding pnetworkingeterminada de JSON es UTF-8. Los caracteres especiales / exóticos no son un problema para UTF-8, pero asegúrese de que su server devuelva su contenido correctamente codificado como UTF-8. Además, ¿ha hecho algo para decirle a su interprete JSON que use una encoding diferente?

Si su JSON viene de un service web, coloque la URL en esta página para ver qué tiene que ver con la encoding:

http://validator.w3.org/

Sí, tengo el mismo problema con el problema de encoding y obtuve el error anterior. Recibí el NSData del server como encoding:NSISOLatin1StringEncoding . Así que tuve que convertirlo a UTF8 antes de analizarlo usando NSJSONSerialization.

 NSError *e = nil; NSString *iso = [[NSString alloc] initWithData:d1 encoding:NSISOLatin1StringEncoding]; NSData *dutf8 = [iso dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:dutf8 options:NSJSONReadingMutableContainers error:&e]; 

Switf 3

 let responseStrInISOLatin = String(data: data, encoding: String.Encoding.isoLatin1) guard let modifiedDataInUTF8Format = responseStrInISOLatin?.data(using: String.Encoding.utf8) else { print("could not convert data to UTF-8 format") return } do { let responseJSONDict = try JSONSerialization.jsonObject(with: modifiedDataInUTF8Format) } catch { print(error) }