To prawda, że
Cocoa nie oferuje rozwiązanie
jeszcze Rdzeń Fundacja robi: CFStringTransform
.
CFStringTransform
Mieszka w zakurzonym, odległym zakątku Mac OS (i iOS), więc jest to mały klejnot. Jest to front end do silnika przekształceń strun Apple ICU compatible. Może wykonywać prawdziwą magię jak transliteracji między grecki i łaciński (lub o wszelkich znanych skryptów), ale mogą być również wykorzystywane do wykonywania zadań przyziemne jak unescaping ciągów z serwera brzydko:
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!
Jak powiedziałem, CFStringTransform
jest naprawdę potężny. Obsługuje wiele predefiniowanych transformacji, takich jak odwzorowywanie przypadków, normalizacje lub konwersja nazw znaków Unicode. Możesz nawet zaprojektować własne transformacje.
Nie mam pojęcia, dlaczego Apple nie udostępnia go z kakao.
Edycja 2015:
OS X 10.11 i iOS 9 dodaj następującą metodę założenia:
- (nullable NSString *)stringByApplyingTransform:(NSString *)transform reverse:(BOOL)reverse;
więc przykład z góry staje ...
NSString *input = @"\\u5404\\u500b\\u90fd";
NSString *convertedString = [input stringByApplyingTransform:@"Any-Hex/Java"
reverse:YES];
NSLog(@"convertedString: %@", convertedString);
Dzięki @nschmidt dla heads up.
"Nie ma wbudowaną funkcję to zrobić" to, co starałem się dowiedzieć. Skończyłem przetaczać własne, po prostu chciałem sprawdzić, czy nie wymyśliłem ponownie koła. Istniejące parsery JSON nie są wystarczająco bliskie dostatecznie na źle sformułowanym wyjściu JSON, które czasami wysyłane są przez podejrzane strony internetowe. – corydoras
+1 dang to sprytnie –