2010-11-10 7 views
4

J'ai quelques données d'image (jpeg) que je veux envoyer de mon application d'iPhone à mon webservice. Pour ce faire, j'utilise le NSData de l'image et je le convertis en une chaîne qui sera placée dans mon JSON.NSData à NSString using initWithBytes: longueur: encodage

Actuellement, je suis en train de faire ceci:

NSString *secondString = [[NSString alloc] initWithBytes:[result bytes] 
                length:[result length] 
                encoding:NSUTF8StringEncoding]; 

Où résultat est de type NSData. Cependant, secondString semble être nul même si la longueur du résultat renvoie une valeur réelle (comme 14189). J'ai utilisé cette méthode puisque le résultat est une donnée brute et non nulle.

Est-ce que je fais quelque chose de mal? J'ai utilisé ce code dans d'autres domaines et il semble fonctionner correctement (mais les zones que j'utilise actuellement impliquent du texte et non des données d'image).

TIA.

Répondre

2

Pour les données binaires, mieux vaut le coder en utilisant le codage Base64 puis le décoder dans votre service Web. J'utilise la classe NSData + Base64 téléchargée de here, cette référence a également été prise de Stackoverflow, un answer fait par @Ken (Merci Ken!).

+0

J'ai essayé Base64 mais j'ai obtenu des caractères JSON illégaux (avant). Je vais regarder de plus près dans l'encodage et voir si je peux trouver l'erreur. – pschang

+0

Doux, ça a marché. On dirait que la fonction base64 que j'utilisais nécessitait un peu de peaufinage. Merci! – pschang

2

Vous ne convertissez pas les données en chaîne. Vous tentez de l'interpréter comme une chaîne codée en UTF-8, qui échouera à moins que les données ne soient vraiment une chaîne codée en UTF-8. Votre meilleur pari est de l'encoder d'une manière ou d'une autre, peut-être avec Base64 comme le suggère Manny, puis de le décoder à nouveau sur le serveur.

+0

OK. Oui, je ne savais pas si c'était possible. J'essaie d'adresser du code dans une bibliothèque externe et je ne savais pas si cela avait du sens. Merci. – pschang

+1

Juste une note pour les futurs lecteurs. A partir du wiki sur UTF-8: "Toutes les séquences d'octets ne sont pas valides UTF-8." Et en regardant de plus près la définition de l'UTF-8, je peux voir où il y a un problème. Il semble que vous rencontriez des problèmes en prenant des données binaires (ce n'est pas UTF-8) et en essayant de l'interpréter comme UTF-8. J'ai regardé autour de Stack Overflow et je n'ai trouvé personne qui le dise explicitement. – pschang

Questions connexes