我有一个iOS应用程序,我们遇到了一些似乎与编码问题有关的错误,因为有些内容在到达服务器时会被截断。这是有问题的,因为它一直在搞乱我们的身份验证机制,这涉及到发布内容的哈希(以及其他一些东西,但这是基础)。
到目前为止,我们还无法在本地重现问题。我们有一个理论,它与表情符号键盘有关;但我试过发布表情符号,国际角色,我能想到的一切。当我尝试时,一切都正确发布。我知道ios在ios 4和5之间编码表情符号的方式有所不同;我们已经设法与我们的一些客户交谈,试图了解他们正在使用的是什么,它通常是iOS 6,带有iphone 4s或5(就像我们的测试设备一样,我已经测试过了)与ios 5和6)...所以它似乎与操作系统无关。
这就是我们为帖子设置请求主体的方式。
[req setHTTPBody:[paramString dataUsingEncoding:NSUTF8StringEncoding]];
以前,我只是将内容类型设置为:
[req setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
我的理论是,明确内容类型中的charset可能会解决它:
[req setValue:@"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
所以我的问题对你来说,这是疯了吗?你认为明确将字符集设置为UTF-8会解决问题吗?您可以建议使用任何其他故障排除技术来确定问题发生的位置?
答案 0 :(得分:0)
您是否有丢失请求的wireshark或fiddler跟踪?我将从那里开始验证客户端确实发送截断的数据,这不是服务器端问题。
无论发送什么数据,检查Content-Length
标头是否正确。由于问题不易重现,可能会从查看问题的用户那里收集更具体的数据,因此可以识别出有问题的输入,并且可以重复再现损坏的请求。
如果您直接从UITextField中提取字符串,我怀疑这是一个编码问题,您不应该遇到编码问题。如果您要往返于CStrings或NSData,那么这将是第一个检查的地方。
无论如何都不是一个确凿的答案,但这就是我要开始的地方。