NSJSONSerialization JSONObjectWithData:options:error: 编码问题

Posted

技术标签:

【中文标题】NSJSONSerialization JSONObjectWithData:options:error: 编码问题【英文标题】:NSJSONSerialization JSONObjectWithData:options:error: encoding issue 【发布时间】:2013-05-09 15:35:30 【问题描述】:

在我的代码中,我下载了UTF8中编码的JSON数据,这是与NSJSONSerialization一起工作的理想选择,但是当我得到解析的对象时,它充满了编码问题,例如:

“Jo\U00e3o e Maria - Ca\U00e7adores de Bruxas”

(必须是“João e Maria - Caçadores de Bruxas”)。尝试用 ASCII、Unicode 等重新编码,但没有成功:

NSData *downloadedData = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:requestURL cachePolicy:cachePolicy timeoutInterval:timeoutInterval] returningResponse:NULL error:&error];
NSDictionary *serializedDictionary = [NSJSONSerialization JSONObjectWithData:downloadedData options:NSJSONReadingAllowFragments error:&error];

编辑:当我使用它打印时,它显示正确:

NSLog(@"Test: %@", [[NSString alloc] initWithData:downloadedData encoding:NSUTF8StringEncoding]);

【问题讨论】:

所以没有问题了吗? 你如何检查解析的数据?如果您使用的是 NSLog,它可能会打印出转义字符,例如 \U00e3 for ã。 谢谢,我在 NSLog 中测试它,因为我仍然没有 UI 可以使用,但在 UILabel 中它可以工作。 【参考方案1】:

这些是 UTF8 编码的字符。格式正确,将它们放在UILabel 或其他东西上,它们就会如你所愿地出现。

【讨论】:

【参考方案2】:

如果您需要精美的文字本身,请尝试

NSString * s = [NSString stringWithUTF8String:[<your_string> UTF8String]];

【讨论】:

以上是关于NSJSONSerialization JSONObjectWithData:options:error: 编码问题的主要内容,如果未能解决你的问题,请参考以下文章

NSJSONSerialization - 无法将数据转换为字符串

Swift 2 - NSJSONSerialization.JSONObjectWithData 处理错误 [重复]

使用 NSJSONSerialization 解析 twitter 搜索 json 数据

使用 NSDictionary 访问 NSJSONSerialization 数据

NSJSONSerialization生成NSCFString *和NSTaggedPointerString *

NSJSONSerialization 不解析这个 JSON