我从中获取数据的一些网站正在返回 UTF-8 字符串,其中 UTF-8 字符已转义,即:\u5404\u500b\u90fd
是否有内置的 cocoa 函数可以帮助解决这个问题,或者我必须编写自己的解码算法。
最佳答案
Cocoa 确实没有提供解决方案,但 Core Foundation 提供了:CFStringTransform
。
CFStringTransform
存在于 Mac OS(和 iOS)尘土飞扬的偏远角落,因此它是一个鲜为人知的瑰宝。它是 Apple 的前端 ICU compatible字符串转换引擎。它可以执行真正的魔术,例如希腊语和拉丁语(或任何已知脚本)之间的音译,但它也可以用于执行平凡的任务,例如从糟糕的服务器中转义字符串:
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!
正如我所说,CFStringTransform
真的很强大。它支持许多预定义的转换,如大小写映射、规范化或 unicode 字符名称转换。您甚至可以设计自己的转换。
我不知道为什么 Apple 不在 Cocoa 中提供它。
2015 年编辑:
OS X 10.11 和 iOS 9 将以下方法添加到 Foundation 中:
- (nullable NSString *)stringByApplyingTransform:(NSString *)transform reverse:(BOOL)reverse;
所以上面的例子变成了...
NSString *input = @"\\u5404\\u500b\\u90fd";
NSString *convertedString = [input stringByApplyingTransform:@"Any-Hex/Java"
reverse:YES];
NSLog(@"convertedString: %@", convertedString);
谢谢 @nschmidt提醒一下。
关于objective-c - 使用 Objective C/Cocoa 对 unicode 字符进行转义,即\u1234,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2099349/