可能与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"]; 

我的理论是,明确内容类型中的字符集可能会解决这个问题:

[req setValue:@"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type"]; 

所以我想问你,这疯了吗?你认为显式地将字符集设置为UTF-8可以解决这个问题吗?您可以推荐任何其他故障排除技术来确定问题发生的位置?

您有失败请求的wireshark或fiddler跟踪吗?我会从那里开始验证客户端是否确实在发送截断的数据,这不是服务器端的问题。

无论发送了什么数据,都要检查Content-Length标头是否正确。由于该问题不容易再现,也许可以从看到该问题的用户那里收集更具体的数据,这样就可以识别出有问题的输入,并且可以重复再现中断的请求。

我怀疑这是一个编码问题,如果你直接从UITextField中提取字符串,你就不应该有编码问题。如果你要去CStrings或NSData,那么这将是第一个检查的地方。

无论如何都不是一个决定性的答案,但这就是我的出发点。

最新更新