AFNetworking中的奇怪编码行为

时间:2014-03-08 12:06:01

标签: php afnetworking afnetworking-2

我正在使用AFNetworking和iOS项目,到目前为止一切正常。现在我有一个PHP脚本应该获取一些信息并返回一些json。脚本提供的信息和json应该返回cointains latin chars,主要是ã和õ。

问题是,当我在我的iOS应用程序中收到json时,字符编码为我认为的NSNonLossyASCIIStringEncoding。我认为编码不是UTF8,因为回到应用程序:

    [jsonManager GET:myURL parameters:sendingData success:^(AFHTTPRequestOperation *op,id responseObject){


    NSLog(@"%d",op.responseStringEncoding);
    NSLog(@"%d",op.responseSerializer.stringEncoding);
    NSLog(@"%@",op.responseString);
    NSLog(@"%@",[[NSString alloc]initWithData:op.responseData encoding:NSNonLossyASCIIStringEncoding]);

} failure:^(AFHTTPRequestOperation *op,NSError *error){

    NSLog(@"%@",op.responseString);


}];

最后一个NSLog(在成功的情况下)是唯一一个按原样输出responseString的NSLog。第三个日志在每个ã的位置输出\ u00e3。 第一个日志确认使用的编码是NSUTF8StringEncoding。 第二个日志指出responseSerializer.stringEnconding是NSNonLossyASCIIStringEncoding,因为我将它设置为类似,之前发出请求,它没有任何区别,不知道为什么......

真奇怪的是,如果我使用浏览器调用脚本,我可以看到输出被编码为UTF8。

这里有什么问题?

谢谢。

1 个答案:

答案 0 :(得分:0)

听起来您的服务器使用不同的编码类型,具体取决于客户端或某些标头。

NSJSONSerialization严格执行RFC 4627,其中声明:

  

JSON文本应以Unicode编码。默认编码是      UTF-8。

JSON始终是Unicode编码的,所以我的猜测是你的服务器没有遵循规范。

尝试使用CURL或像Advanced REST Client这样的Chrome插件来复制行为,而不是使用浏览器。一个开始的地方是您的服务器正在解析AcceptUser-AgentContent-Type标题。