ios - 尝试解析未知编码的 POST 响应

标签 ios objective-c post encoding

我正在尝试使用以下内容解析来自发布请求的响应:

// PERFORM REQUEST
NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

    // GET RESPONSE STRING
    responseStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

    // SIGNAL DONE
    dispatch_semaphore_signal(sema);

}];

我一直遇到特殊字符的问题,例如 À È Ì Ò Ù 返回错误。有没有办法确定数据的正确编码?或者用可以正确解释这些字符的东西来解码数据?

最佳答案

如果你有元音符号,NSASCIIStringEncoding 肯定是错误的编码,因为这意味着原始的 7 位 ASCII,并且对于值 > 127 的任何字节都会失败。

没有通用的方法来确定文本的编码。根据您正在下载的数据,可能会有启发式方法。例如。如果您知道包含在所有包含国际字符的响应中的字符串,您可以将该字节序列与各种编码中的相同字节序列进行比较。或者有些库包含有关某些字节序列频率的统计信息,以检测文本是什么语言和编码,但这些库很可能会猜错。

您已经在评论中说过没有 header 指示编码,这将是一种替代解决方案。

除此之外,您只能查看正在与之通信的任何服务器的规范,并对那里给定的编码进行硬编码。或者,如果没有,请尝试不同的编码,直到一种有效。

目前最常见的编码是 UTF8 和 Windows Latin 1。如果您要等到很久以后才能知道(例如解析 JSON 响应),我建议使用 0...255 中任意值的编码有效(如 Windows Latin 或无损 ASCII),并在检查数据后再次转换。

关于ios - 尝试解析未知编码的 POST 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46590057/

相关文章:

php - 将 ~1kk 字 rune 本保存到 MySQL

ios - 调试器未进入 appDelegate

ios - 在 iOS 中取消付款?

iphone - 内存泄漏警告,由于 NSArray 的大图像

post - IPV6 curl POST 请求

javascript - Flask request.get_json() 没有收到来自 $.post() 请求的任何内容

ios - 我无法选择要在 iTunes Connect 上的 TestFlight 中测试的 iOS 版本

iOS:如何获取通过调用 EKEventEditViewController 创建的事件的标识符

ios - 如何将按钮固定到 View Storyboard iOS 的底部

ios - 如何限制 UIAlertView UITextField 中的字符输入