NSData转换为NSString,带有JSON响应。

8

NSData* jsonData 是包含 JSON 数据的 HTTP 响应。

NSString* jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"jsonString: %@", jsonString);

我得到了结果:
{ "result": "\u8aaa" }

如何将数据编码为正确的字符串,而不是像"\uxxxx"这样的Unicode字符串?


1
你是怎麼印出{ "result" = "\U8aaa"; }的呢?看起來有點像字典的NSLog。你是否已經使用JSON解析器(例如NSJSONSerialization)了呢? - Martin R
这很困难,因为应该是\u而不是\U。你能对此做些什么吗? - borrrden
@borrrden:是的,你说得对。应该是小写的 'u'。我已经编辑了我的问题。谢谢。 - shiami
@shiami: 那真的是“jsonString”的輸出嗎?我只是好奇,因為JSON看起來像這樣:{ "result" : "\u8aaa" }。 - Martin R
@shiami:也许你可以展示更多的代码,从AFNetworking请求开始。 - Martin R
显示剩余3条评论
2个回答

19

如果您转换JSON数据

{ "result" : "\u8aaa" }

将一个NSDictionary转换为字典(例如使用NSJSONSerialization),并打印该字典。

NSError *error;
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
NSLog(@"%@", jsonDict);

然后您将获得输出

{
    result = "\U8aaa";
}
由于NSDictionary的description方法对所有非ASCII字符都使用“\Unnnn”转义序列,因此出现了这种情况。但是这仅适用于控制台中的显示,字典本身是正确的!如果您打印键的值...
NSLog(@"%@", [jsonDict objectForKey:@"result"]);

那么你将会得到期望的输出


是的,你说得对。现在我终于弄明白了。谢谢。 - shiami

0

我不太明白问题出在哪里。AFNetworking 给了您一个有效的 JSON 数据包。如果您想让上面的代码输出字符而不是 \u… 转义序列,您应该说服提供结果的服务器更改其输出。但这并非必要。您最有可能想做的下一步是将其通过 JSON 反序列化器运行...

NSDictionary * data = [NSJSONSerialization JSONObjectWithData:jsonData …];

...然后您应该收到以下字典:@{@"result":@"说"}。请注意,result键包含一个只有一个字符的字符串,我猜这就是您想要的。

顺便说一句:将输出复制粘贴到您的问题中,而不是手动转录它,这样可以避免几轮不必要的更正和混淆。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接