2015-10-29 1 views
1

Comment lire un fichier json japonais avec la bibliothèque NSJSONSerialization?Swift2: lecture d'un fichier json local codé en UTF-8

J'ai essayé avec (code avec Swift2):

let filePath = NSBundle.mainBundle().pathForResource("myfile",ofType:"json") 
let optData = NSData(contentsOfFile:filePath!) 

do { 
    let abc = try NSJSONSerialization.JSONObjectWithData(optData! as NSData, options: .MutableContainers) as! NSDictionary 
    print("data read: \(abc)") 
} catch { 
    print("error: \(error)") 
} 

Mais données dans abc sont illisibles. Donc ma question est: comment puis-je changer le codage de l'objet NSData.

D'ailleurs, si je convertir l'objet NSData dans NSString, JSON japonais est parfaitement encodées:

let stringData = NSString(data: optData!, encoding: NSUTF8StringEncoding) 

merci

Répondre

2

fichiers JSON sont toujours dans un codage Unicode. NSJSONSerialization gère automatiquement toutes les possibilités valables (y compris UTF-8) et le fait que votre stringData semble raisonnable suggère que l'encodage n'est pas le problème.

En regardant votre code, les possibilités de quelque chose qui ne va pas sont:

  • Les données ne sont pas valables JSON. Essayez de le coller dans http://jsonlint.com pour voir si c'est OK.
  • L'objet de niveau supérieur dans JSON est un tableau, auquel cas la conversion en NSDictionary échouera. Au lieu de la distribution forcée, utilisez if let .... as? NSDictionary et si cela échoue, essayez de le convertir en NSArray.
+0

Merci. Mon Json est valide et l'objet de niveau supérieur n'est pas un tableau. Je vais essayer avec un NSArray – johann

+0

@johann Pouvez-vous mettre le JSON dans la question? En outre, le journal de la console l'exécute. – JeremyP

+0

Après "boucler" le dictionnaire et imprimer le contenu sous forme de chaîne, il devient lisible! Je vous remercie – johann