7
votes

Convertissez le codage UTF-8 en codage ISO 8859-1 avec Nstring

J'ai une application qui lit les données du format UTF-8 à partir du serveur, mais elle doit être affichée dans ISO 8859-1 (Latin-1). Y a-t-il des API de cacao pour y parvenir?


5 commentaires

"Affichage dans l'ISO 8859-1" n'a aucun sens. Si vous affichez du texte, les caractères sont tirés. Et les caractères sont indépendants d'un codage. Le codage est utilisé lorsque le texte est stocké ou transmis, mais pas à l'écran.


@ user543101 Quelle partie de ma réponse n'a pas suffisamment répondu à votre question?


Je suis d'accord avec la codo, cela n'a aucun sens. Prenant des caractères codés ISO-8859-1 et simplement les sérialiser comme UTF-8 est uniquement correct car ISO-8895-1 a été incorporé comme les 256 premiers points de code, mais cela échouerait avec un autre codage et pouvait échouer si vous n'êtes pas réellement en utilisant ISO-8859-1 (par exemple, en utilisant 8859-15 ou Windows-1252). Le serveur doit envoyer des points de codes Unicode codés corrects UTF-8 et vous devez simplement afficher les glyphes associés.


@Jason tandis que le motif de la question peut ne pas avoir de sens, il reste encore une réponse.


@Jacob La question est systémique d'un autre problème et doit être signalée que cette solution ne fonctionnera que de manière fiable avec 8859-1. Tout autre codage sérialisé de cette manière, voire une variante de 8859-1 peut échouer.


4 Réponses :


14
votes

Vous pouvez utiliser nstring code> 's GetCsching: Maxlength: codage: code> méthode, comme ceci:

NSString *converted_str = [NSString stringWithCString:converted encoding:NSISOLatin1StringEncoding];


0 commentaires

-1
votes

Utilisez xxx

exemple: xxx

qui devrait le faire.


3 commentaires

Cette fonction fait nstring à partir du tampon Latin1 :) L'auteur demande sur l'opération inverse.


@Even: cette fonction demande une chaîne C Yourcstringhere et émet une NSSRING avec un codage latin, pas d'un tampon latin comme ce que vous avez cité: "... faites nstring de la mémoire tampon latin1: )" Merci:-)


Ce n'est pas le cas. Votre code dit que la chaîne C est codée dans l'ISO-8859-1 et vous voulez une nstring. Donc, s'il avait la chaîne "Åhus" codée comme UTF-8, mais de latin-1, il aurait un flux d'octets comme: C3 A5 68 75 73 et votre méthode générerait la NString: "Ã ¥ HUS" qui est clairement faux .



0
votes

Je préfère utiliser DataguageCoding: allemandeLossyConversion: Parce qu'il ne vous oblige pas à deviner la quantité de stockage à allouer et que le NSData retourné vous indique combien d'octets étaient nécessaires.


0 commentaires

0
votes

Jacobs La réponse n'a pas vraiment fonctionné pour mon. Qu'est-ce qui a finalement travaillé pour moi, il suffit d'utiliser

[username stringByAddingPercentEscapesUsingEncoding:NSISOLatin1StringEncoding]


0 commentaires