2009-05-12 4 views
2

Ich arbeite an einer iPhone App, die hochgestellte und tiefgestellte Zeichen anzeigen muss. Ich benutze einen Picker, um Daten von einem Plist einzulesen, aber die Unicode-Werte werden nicht korrekt im Pickerview angezeigt. Tief- und Hochstellungen werden nicht erkannt. Ich gehe davon aus, dass dies auf die Codierung der PLIST als utf-8 zurückzuführen ist, also ist die Frage, wie konvertiert man eine PLIST-String-Codierung von UTF-8 zu UTF-16?Einen plist utf-8 Wert als utf-16 lesen

Nur ein wenig mehr Ausarbeitung:

Wenn ich dies tun zeigt es richtig zumindest in einem Textfeld:

NSString * Gleichung = @ "x \ u00B2 + y \ u00B2 = z \ u00B2"

Wenn ich jedoch die gleiche Zeichenfolge in einer PLIST-Datei definiere und versuche, sie einzulesen und einer Zeichenfolge zuzuordnen und sie in einer Auswahlansicht anzuzeigen, wird nur die Codierung und nicht die hochgestellten Zeichen angezeigt.

@Matt: Vielen Dank für Ihren Vorschlag der Unicode wird gemieden, das ist \ u00B2 => \ u00B2. Das Suchen nach "maskierten Werten in plists" ergab keine nützlichen Ergebnisse, und ich konnte die Tastatur cmd-ctrl-shift- + nicht verwenden, um zu arbeiten. Alle weiteren Vorschläge würden sehr geschätzt werden !!

+2

UTF-8 kann alles kodieren, die UTF-16 kodieren, können , die Größen können einfach anders sein. Sind Sie sicher, dass der PLIST tatsächlich utf-8 kodiert ist? –

+0

Wie wurde die PLIST-Datei erstellt?Wenn nicht schon geschehen, würde ich empfehlen, die fehlerhaften Einträge in der Property List Editor App unter/Developer/Applications/Utilities zu bearbeiten, um sicherzustellen, dass sie als korrekte Werte eingegeben werden. Mit anderen Worten: Geben Sie sie tatsächlich ein, versuchen Sie nicht, spezielle Unicode-Escape-Zeichen wie \ u2026 einzugeben, sondern drücken Sie Option-; um den ... Charakter usw. zu bekommen. –

+0

Zu Jasons Kommentar: meinst du, dass Subskribierung in utf-8 funktionieren sollte? – ennuikiller

Antwort

0

Plistdateien betten automatisch ihre eigene Codierung ein. d. h .:

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

Das bedeutet, dass sie, egal ob UTF-8, UTF-16 oder andere, korrekt geladen werden.

Wenn Sie Probleme mit dem Laden von einem Plist haben, muss es etwas anderes sein. Verwenden Sie:

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

, um das gesamte plist als Ausgangspunkt für das Finden des Problems auszugeben.

Wenn Sie neugierig auf die Kodierungen sind, können Sie sie ändern, indem Sie als Textdatei in Xcode öffnen (rechte Maustaste in den Dateibaum und wählen Sie Öffnen als ...) und dann die Ansicht-> Text-> Datei verwenden Encoding-Menü zum Ändern der Dateicodierung (Sie müssen die XML-Codierung anpassen).

+0

@Matt: Vielen Dank für Ihren Vorschlag der Unicode ist escapeed das ist \ u00B2 => \ u00B2. Das Suchen nach "maskierten Werten in plists" ergab keine nützlichen Ergebnisse, und ich konnte die Tastatur cmd-ctrl-shift- + nicht verwenden, um zu arbeiten. Alle weiteren Vorschläge würden sehr geschätzt werden !! – ennuikiller

+0

@ennuikiller Hast du die Fluchten in den Plist gelegt? Das wird überhaupt nicht funktionieren ... der Plist wird nicht geparst, um Fluchten zu ersetzen. Wenn Sie Sonderzeichen anzeigen möchten, müssen Sie die genauen Zeichen in das PLIST kopieren (keine Escapes - die eigentlichen Zeichen, die bereits hochgestellt sind). –

0

Nach etwa einem Tag des Experimentierens kam ich zufällig mit der OS X Charakterpalette. Das funktioniert gut, wenn auch ein bisschen langweilig ... Ich würde immer noch gerne entdecken, wie man die Codes als Text in einem Pliste einbetten kann.

4

Die \ u-Varianten funktionieren nur, wenn sie dem C-Compiler angezeigt werden. Wenn Sie bei UTF-8 wirklich Zeichencodes eingeben möchten, anstatt sie einfach einzugeben (der Begleiter der Zeichenpalette ist der Tastatur-Viewer, der aktualisiert wird, wenn Sie die Sondertasten drücken, um nach bestimmten Zeichen zu suchen) Sie müssen XML-Entitäten verwenden, dh &#x00B2;.

0

Scheint nicht mit mehr Unicode zu arbeiten wie

&#x2233E;

Header der 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"> 
Verwandte Themen