【问题标题】:Strange encoding behaviour in AFNetworkingAFNetworking 中的奇怪编码行为
【发布时间】:2014-03-08 12:06:01
【问题描述】:

我在 iOS 项目中使用 AFNetworking,到目前为止一切正常。现在我有一个 PHP 脚本,它应该获取一些信息并返回一些 json。脚本提供的信息和它应该返回的 json 都包含拉丁字符,主要是 ã 和 õ。

问题是,当我在我的 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 的日志。第三个日志输出 \u00e3 代替每个 ã。 第一个日志确认使用的编码是 NSUTF8StringEncoding。 第二个日志指出 responseSerializer.stringEnconding 是 NSNonLossyASCIIStringEncoding 因为我设置它是这样的,在发出请求之前,它没有任何区别,也不知道为什么......

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

这里有什么问题?

谢谢。

【问题讨论】:

    标签: php afnetworking afnetworking-2


    【解决方案1】:

    听起来您的服务器根据客户端或某些标头使用不同的编码类型。

    NSJSONSerialization 严格实现RFC 4627,其中声明:

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

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

    尝试使用 CURL 或 Chrome 插件(如 Advanced REST Client)复制该行为,而不是使用您的浏览器。一个起点是您的服务器解析 Accept、User-Agent 和 Content-Type 标头。

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 1970-01-01
      • 2016-05-10
      • 2016-09-05
      • 1970-01-01
      • 2015-07-08
      • 2011-08-27
      • 1970-01-01
      • 2013-01-21
      相关资源
      最近更新 更多