Konvertierung entging UTF8-kodierten Zeichen wieder in Ihre ursprüngliche form
Ich versuche zu Lesen, strings aus einem array, die aus einer plist und drucken Sie diese Zeichenfolgen.
Die strings im array enthalten entgangen UTF8 - Zeichen, beispielsweise "Nuša Florjančič" wird "Nu\u0161a Florjan\u010di\u010d"
beim Lesen aus der plist. Es gibt keinen Weg, um zu ändern den Inhalt der plist, aber mein Programm braucht, um die Namen anzeigen zu richtig.
Das merkwürdige ist, dass Objective-C scheint dies automatisch tun, wenn ich bin hart codierten string. Jedoch, wenn ich den string aus der plist nichts passiert.
Ihnen ein Beispiel zu geben, hier einige code:
NSString *name1 = @"Nu\u0161a Florjan\u010di\u010d";
NSString *name2 = [list objectAtIndex:0];
NSLog(@"name 1: %@", name1);
NSLog(@"name 2: %@", name2);
[list objectAtIndex:0]
enthält @"Nu\u0161a Florjan\u010di\u010d"
- der einzige Unterschied ist, dass es wurde eingestellt über den plist-editor.
Die Ausgabe in der Konsole ist:
2011-10-22 18:00:02.595 Test[13410:11c03] name 1: Nuša Florjančič
2011-10-22 18:00:02.595 Test[13410:11c03] name 2: Nu\u0161a Florjan\u010di\u010d
Ich habe versucht, alle möglichen Dinge, einschließlich die Umwandlung der string in einen C-string und dann die Erstellung einer NSString
Objekt mit einer UTF-8-Codierung, aber nichts funktionierte überhaupt.
Ich würde wirklich zu schätzen alle Hinweise von Ihnen, die helfen könnten, mir bei der Lösung dieses scheinbar Banale problem.
InformationsquelleAutor der Frage Tobi | 2011-10-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es klingt wie der string in der plist enthält die Zeichen "\u0161" eher als das Unicode-Zeichen Nummer 0x161. So müssen Sie decodieren die \u entweicht in die Zeichenfolge, die Sie haben, extrahiert aus der plist.
NSString
tun können, die für Sie mitNSNonLossyASCIIStringEncoding
:InformationsquelleAutor der Antwort rob mayoff
Andere Lösung ist, analysieren Sie Ihre Liste string (ich verwendet, um zu analysieren, bevor Sie es bauen)
(Sieht aus wie Kroatisch, ich denke latin1 richtig passen)
InformationsquelleAutor der Antwort VictorPurMar