Es correcto que
cacao no ofrece una solución
, sin embargo Fundación Core hace: CFStringTransform
.
CFStringTransform
vive en una esquina polvorienta y remota de Mac OS (y iOS) por lo que es una pequeña joya. Es la parte delantera del motor de transformación de cadenas ICU compatible de Apple. Se puede hacer magia real como transcripciones entre griego y latín (o sobre cualquier script conocidos), pero también puede ser utilizado para hacer las tareas cotidianas como la representación no literal cuerdas desde un servidor chungo:
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!
Como ya he dicho, CFStringTransform
es realmente poderoso Es compatible con varias transformaciones predefinidas, como asignaciones de casos, normalizaciones o conversión de nombre de carácter unicode. Incluso puedes diseñar tus propias transformaciones.
No tengo idea de por qué Apple no lo pone a disposición de Cocoa.
Edición 2015:
OS X e iOS 10.11 9 añade el siguiente método a la Fundación:
- (nullable NSString *)stringByApplyingTransform:(NSString *)transform reverse:(BOOL)reverse;
Así que el ejemplo de arriba se convierte en ...
NSString *input = @"\\u5404\\u500b\\u90fd";
NSString *convertedString = [input stringByApplyingTransform:@"Any-Hex/Java"
reverse:YES];
NSLog(@"convertedString: %@", convertedString);
Gracias @nschmidt por el cara a cara.
"No hay ninguna función integrada de hacerlo" es lo que estaba tratando de averiguar. Terminé de rodar el mío, solo quería comprobar que no estaba reinventando la rueda. Los analizadores JSON existentes ya no son lo suficientemente indulgentes con la salida JSON mal formada que a veces envían los sitios web dudosos. – corydoras
+1 dang esto es inteligente –