E 'corretto che
cacao non offre una soluzione
, eppure Nucleo Fondazione fa: CFStringTransform
.
CFStringTransform
vive in un angolo polveroso e remoto di Mac OS (e iOS) e quindi è un piccolo gioiello. È il front-end del motore di trasformazione delle stringhe Apple ICU compatible. E 'possibile eseguire la vera magia come traslitterazioni tra greci e latini (o su eventuali script noti), ma può anche essere usato per fare compiti banali come unescaping stringhe da un server di merda:
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!
Come ho detto, CFStringTransform
è davvero potente. Supporta un numero di trasformazioni predefinite, come le mappature dei casi, le normalizzazioni o la conversione del nome carattere unicode. Puoi persino progettare le tue trasformazioni.
Non ho idea del motivo per cui Apple non lo rende disponibile da Cocoa.
Edit 2015:
OS X e iOS 10.11 9 aggiungere il seguente metodo per Fondazione:
- (nullable NSString *)stringByApplyingTransform:(NSString *)transform reverse:(BOOL)reverse;
Così l'esempio precedente diventa ...
NSString *input = @"\\u5404\\u500b\\u90fd";
NSString *convertedString = [input stringByApplyingTransform:@"Any-Hex/Java"
reverse:YES];
NSLog(@"convertedString: %@", convertedString);
Grazie @nschmidt per l'heads up.
fonte
2012-07-23 14:55:56
"Non c'è costruito in funzione per farlo" è quello che stavo cercando di scoprire. Ho finito col rotolare il mio, volevo solo verificare che non stavo reinventando la ruota. I parser JSON esistenti non sono abbastanza vicino a perdonare abbastanza sull'output JSON mal formato che a volte viene inviato da siti Web poco sicuri. – corydoras
+1 questo è intelligente –