2009-05-12 17 views
2

Je travaille sur une application iphone qui doit afficher des exposants et des indices. J'utilise un sélecteur pour lire les données d'une plist mais les valeurs Unicode ne sont pas affichées correctement dans la sélection. Les indices et les indices supérieurs ne sont pas reconnus. Je suppose que cela est dû à l'encodage de la plist comme utf-8, alors la question est de savoir comment convertir une chaîne de plist encodage de utf-8 à utf-16?Lecture d'une valeur de plf utf-8 en tant que utf-16

Juste un peu plus approfondi:

Si je fais cela, il affiche correctement au moins dans un champ de texte:

NSString * équation = @ "x \ u00B2 + y \ u00B2 = z \ u00B2"

Cependant, si je définis la même chaîne dans un plist et que j'essaie de la lire et de l'assigner à une chaîne et de l'afficher dans une sélection, elle affiche simplement le codage et non les exposants.

@Matt: merci pour votre suggestion l'unicode est échappé c'est \ u00b2 => \ u00B2. La recherche de "valeurs d'échappement dans les plistes" n'a pas donné de résultat utile, et je n'ai pas pu utiliser le clavier cmd-ctrl-shift- + pour travailler. Toute suggestion supplémentaire serait grandement appréciée!

+2

UTF-8 peut coder tout ce UTF-16 peut coder , les tailles peuvent être différentes. Êtes-vous sûr que le plist est réellement encodé en utf-8? –

+0

Comment le fichier plist a-t-il été créé?Si ce n'est pas déjà fait, je vous recommande de modifier les entrées incriminées dans l'application Property List Editor dans/Developer/Applications/Utilities pour vous assurer qu'elles sont correctes. En d'autres termes, tapez-les, n'essayez pas de taper les caractères spéciaux d'échappement Unicode comme \ u2026 là-dedans, à la place vous devriez appuyer sur Option-; pour obtenir le ... caractère, etc. –

+0

Pour le commentaire de Jason: voulez-vous dire que l'indice devrait fonctionner dans utf-8? – ennuikiller

Répondre

0

Les fichiers Plist intègrent automatiquement leur propre codage. i.e. .:

<?xml version="1.0" encoding="UTF-8"?> 

Cela signifie que si elles sont UTF-8, UTF-16 ou autre, ils seront chargés correctement.

Si vous rencontrez des problèmes avec le chargement à partir d'un plist, il doit être autre chose. Essayez d'utiliser:

NSLog(@"%@", [[[NSDictionary alloc] initWithContentsOfFile:@"/path/to/plist"] autorelease]); 

pour sortir le plist entier comme point de départ pour trouver le problème. Si vous êtes curieux de connaître les encodages, vous pouvez les modifier en ouvrant comme fichier texte dans Xcode (cliquez avec le bouton droit dans l'arborescence des fichiers et sélectionnez Ouvrir sous ...) puis en utilisant le fichier View-> Text-> File Encodage du menu pour changer le codage du fichier (vous devrez corriger le codage XML pour qu'il corresponde).

+0

@Matt: merci pour votre suggestion l'unicode est échappé c'est \ u00b2 => \\ u00B2. La recherche de "valeurs d'échappement dans les plistes" n'a pas donné de résultat utile, et je n'ai pas pu utiliser le clavier cmd-ctrl-shift- + pour travailler. Toute suggestion supplémentaire serait grandement appréciée! – ennuikiller

+0

@ennuikiller Avez-vous mis les évasions dans le Plist? Cela ne fonctionnera pas du tout ... le plist n'est pas analysé pour remplacer les évasions. Si vous voulez que des caractères spéciaux apparaissent, vous devez copier les caractères exacts dans le plist (pas d'échappement - les caractères réels, déjà en exposant). –

0

Après environ une journée d'expérimentation, j'ai utilisé le palatte de caractères OS X. Cela fonctionne bien bien qu'un peu fastidieux ... J'aimerais quand même découvrir comment intégrer les codes en tant que texte dans un plist.

4

Les variantes \ u ne fonctionnent que lorsqu'elles sont présentées au compilateur C. Pour UTF-8, si vous voulez vraiment taper des codes de caractères plutôt que de simplement les taper (le compagnon de la palette de caractères est le visualiseur de clavier, qui se mettra à jour lorsque vous appuierez sur les touches de modification), puis vous devrez utiliser des entités XML, c'est-à-dire &#x00B2;.

0

ne semble pas travailler avec plus unicode comme

&#x2233E;

tête du plist:

<?xml version="1.0" encoding="UTF-8"?> 
    2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
    3 <plist version="1.0">