我正在使用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。
这里有什么问题?
谢谢。
答案 0 :(得分:0)
听起来您的服务器使用不同的编码类型,具体取决于客户端或某些标头。
NSJSONSerialization严格执行RFC 4627,其中声明:
JSON文本应以Unicode编码。默认编码是 UTF-8。
JSON始终是Unicode编码的,所以我的猜测是你的服务器没有遵循规范。
尝试使用CURL或像Advanced REST Client这样的Chrome插件来复制行为,而不是使用浏览器。一个开始的地方是您的服务器正在解析Accept
,User-Agent
和Content-Type
标题。