Нет встроенной функции для удаления C.
Вы можете немного обмануть с помощью NSPropertyListSerialization
, так как список "старого стиля текста" поддерживает экранирование C через \Uxxxx
:
NSString* input = @"ab\"cA\"BC\\u2345\\u0123";
// will cause trouble if you have "abc\\\\uvw"
NSString* esc1 = [input stringByReplacingOccurrencesOfString:@"\\u" withString:@"\\U"];
NSString* esc2 = [esc1 stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
NSString* quoted = [[@"\"" stringByAppendingString:esc2] stringByAppendingString:@"\""];
NSData* data = [quoted dataUsingEncoding:NSUTF8StringEncoding];
NSString* unesc = [NSPropertyListSerialization propertyListFromData:data
mutabilityOption:NSPropertyListImmutable format:NULL
errorDescription:NULL];
assert([unesc isKindOfClass:[NSString class]]);
NSLog(@"Output = %@", unesc);
но учтите, что это не очень эффективно. Намного лучше, если вы напишите свой собственный парсер. (Кстати, вы декодируете строки JSON? Если да, вы можете использовать существующие парсеры JSON .)