UTF8-Dekodierung mit NSString
Ich bin neu in Objective-C und versuchen, zu konvertieren, eine fehlerhafte UTF8-codiert NSString auf eine wellformed mit dem ein Beispiel auf äpfel docs.
NSString *theString = @"Lügen"; //should be "ü"
NSString *asciiString = [[NSString alloc] initWithData:asciiData encoding:NSASCIIStringEncoding];
NSLog(@"Original: %@ (length %d)", theString, [theString length]);
NSLog(@"Converted: %@ (length %d)", asciiString, [asciiString length]);
Ergebnis:
Original: Lügen (length 6)
Converted: LA1/4gen (length 8)
Dieser hier ist nichts zu tun:
NSString* str = [NSString stringWithUTF8String:
[theString cStringUsingEncoding:NSASCIIStringEncoding]];
Dieser hier stürzt mein app
NSString* str = [NSString stringWithUTF8String:
[theString cStringUsingEncoding:NSUTF8StringEncoding]];
Jemand eine Idee, was ich falsch mache?
- Könntest du einen dump der strings als hex? Ich lese keine fehlerhafte UTF8 fließend 🙂
- dies ist ein "ü" nicht wissen, wie man den hex Wert 😉
- Posten Sie bitte details des Absturzes in jeder Frage mit einem Absturz.
- Sie sollte hinzufügen, dass als Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
"Ungültige UTF-8 Sequenz" bezeichnet eine Sequenz von bytes, die sind ungültig in UTF-8. Ihr problem ist, dass unerwartete Ergebnisse nach der Analyse einer Zeichenfolge durch eine andere Codierung als der ursprüngliche Autor der string.
Hexadezimale Daten
C3 BC
analysiert mit UTF-8-Kodierung Zeichenü
. Stattdessen werden Sie verwendet, Latin-1-Codierung, die Ergebnisse inü
. Dann erstellt man sich einen NSString aus dem Latin-1-string geparst, das heißt, Sie umgewandelt die Latin-1-string in einen UTF-16-string (das ist das native format von NSString).Repräsentiert eine gegebene Daten in verschiedenen Kodierungen zeigt sich, wie verschiedene chars, aber nicht die Daten zu ändern. Umstellung auf eine andere Codierung ändert die Daten in einem Versuch, die gleichen Zeichen. Beispiel: Der Charakter
ü
istC3 83 C2 BC
in UTF-8, aberC3 BC
in Latin-1. So wandelte ich auf die gleichen Zeichen in Latin-1 um die original-Daten, und dann habe ich analysiert, wie UTF-8.