我正在尝试使用以下内容解析来自发布请求的响应:
// 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/