objective-c - 使用 Objective C/Cocoa 对 unicode 字符进行转义,即\u1234

标签 objective-c cocoa unicode

我从中获取数据的一些网站正在返回 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/

相关文章:

objective-c - "Expected a Type"编译器应该知道的协议(protocol)错误

iphone - iPhone应用程序中的弧形文本

objective-c - 从 main.storyboard OSX 中删除默认窗口

unicode - 在经典 ASP 中过滤编码的 XSS

mysql - spring mvc和mysql的UTF-16编码

ios - 在 ViewController 之间切换后如何重置导航委托(delegate)

ios - 如何在 iPhone 编程中解析 SOAP xml 响应

iOS 前缀文件 : Including NSManagedObjects (Core Data generated classes)

macos - 获取 Mojave 上的鼠标坐标

c# - Unicode 名称正则表达式