Es ist richtig, dass
Cocoa keine Lösung
, noch Core Foundation tut anbietet: CFStringTransform
.
CFStringTransform
lebt in einer staubigen, abgelegenen Ecke von Mac OS (und iOS) und so ist es ein wenig bekannt Juwel. Es ist das Frontend zu Apples ICU compatible String Transformation Engine. Es kann zwischen griechischen und lateinischen (oder zu bekannter Skripte) echte Magie wie Transkriptionen durchführt, aber es kann auch profane Aufgaben zu tun wie URL-Kodierung Strings von einem crappy-Server verwendet werden:
NSString *input = @"\\u5404\\u500b\\u90fd";
NSString *convertedString = [input mutableCopy];
CFStringRef transform = CFSTR("Any-Hex/Java");
CFStringTransform((__bridge CFMutableStringRef)convertedString, NULL, transform, YES);
NSLog(@"convertedString: %@", convertedString);
// prints: 各個都, tada!
Wie gesagt, CFStringTransform
ist wirklich mächtig. Es unterstützt eine Reihe vordefinierter Transformationen, wie beispielsweise Fallzuordnungen, Normalisierungen oder die Konvertierung von Unicode-Zeichennamen. Sie können sogar eigene Transformationen entwerfen.
Ich habe keine Ahnung, warum Apple es nicht von Cocoa verfügbar macht.
Bearbeiten 2015:
OS X 10.11 und iOS 9 die folgende Methode Foundation hinzufügen:
- (nullable NSString *)stringByApplyingTransform:(NSString *)transform reverse:(BOOL)reverse;
So das Beispiel von oben wird ...
NSString *input = @"\\u5404\\u500b\\u90fd";
NSString *convertedString = [input stringByApplyingTransform:@"Any-Hex/Java"
reverse:YES];
NSLog(@"convertedString: %@", convertedString);
Danke @nschmidt für die Köpfe hoch.
"Es gibt keine integrierte Funktion, es zu tun" ist das, was ich versuche, es herauszufinden. Ich rollte meine eigene, wollte nur überprüfen, dass ich das Rad nicht neu erfunden habe. Die vorhandenen JSON-Parser sind bei fehlerhafter JSON-Ausgabe, die manchmal von zwielichtigen Websites gesendet werden, nicht annähernd fehlerverzeihend. – corydoras
+1 dingt das ist klug –