2011-11-15 17 views
6

Sono in procinto di un'app che parla con un server nodejs utilizzando socket e JSON, e dal momento che iOS 5 ha il proprio NSJSONSerialization ho pensato che potrebbe essere la strada per Seguire. Prima, ho usato la libreria leggera di yail.NSJSONSerialization e Unicode, non suoneranno bene insieme

Ad ogni modo, dopo la migrazione a NSJSONSerialization ho cominciato a incontrare problemi con la codifica, prima della modifica, il carattere Ö avrebbe mandato ben al server e viceversa, ancora in fase di Ö, ma ora, NSJSONSerialization lascia Ö ancora in unicode char cioè \U00f6.

Leggendo la documentazione dice che gli oggetti JSON viene convertito in UTF-8 per impostazione predefinita. E quando converto la risposta dal server a una semplice NSString, il Ö si presenta proprio come previsto, ma è ancora in JSON naturalmente.

Please help me con i vostri pensieri e così, dovrei tornare a yail o utilizzare il built-in NSJSONSerialization?

Grazie, Simon

+0

Puoi approfondire come hai stabilito che 'NSJSONSerialization' lascia ancora' \ U00f6' nelle stringhe risultanti? Nel mio test, decodifica correttamente con 'ö'. Sei sicuro di non confondere la rappresentazione predefinita '-description' del risultante' NSDictionary'/'NSArray' con essa non decodificando effettivamente il risultato? – wulong

+0

cosa intendi? facendo un semplice 'NSLog (@ "% @", [NSJSONSerialization JSONObjectWithData: opzioni di dati: 0 errore: &err]);' uscite dizionario con una stringa con unicode decodificato, vale a dire '\ U00f6' – Simon

+1

E 'possibile che il modo in cui NSLog è la scelta di rappresentare. il personaggio è con il codice sfuggito piuttosto che il carattere effettivo per il bene di tenere il registro pulito. State tubazioni l'oggetto dati direttamente da una libreria di networking per NSJSONSerialization? Puoi pubblicare alcuni esempi di codice? –

risposta

3

NSLog chiama la descrizione sui suoi argomenti, che capita di stampare il codice Unicode invece del carattere stesso. Prova ad esempio:

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

E vedrete che la stampa

{ 
    hello = "\U00f6"; 
} 

Quindi, è probabile, che la decodifica JSON è stato fatto bene.

0

JSONSerialization può essere utilizzato solo con alcuni tipi: NSString, NSNumber, NSArray, NSDictionary o NSNull solo per difetto ... se avete bisogno di utilizzare altri oggetti nel vostro JSON, io consiglia di utilizzare https://github.com/johnezang/JSONKit

Problemi correlati