0

我有一个 iOS 应用程序,我们遇到了一些似乎与编码问题有关的错误,因为某些内容在到达服务器时被截断。这是有问题的,因为它一直在扰乱我们的身份验证机制,这涉及对发布的内容进行哈希处理(以及其他一些内容,但这是基础知识)。

到目前为止,我们还无法在本地重现该问题。我们有一个理论,它与表情符号键盘之类的东西有关;但我尝试过发布表情符号、国际字符以及我能想到的一切。当我尝试时,一切都会正确发布。我知道 ios 4 和 5 之间 ios 对表情符号的编码方式有所不同;我们已经设法与我们的一些客户进行了交谈,试图了解他们正在使用什么,通常是 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 会解决问题吗?您可以推荐任何其他故障排除技术来找出问题所在?

4

1 回答 1

0

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

无论发送的数据如何,都要检查Content-Length标头是否正确。由于问题不容易重现,或许可以从看到问题的用户那里收集更具体的数据,这样可以识别有问题的输入,并且可以重复重现损坏的请求。

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

无论如何都不是一个决定性的答案,但这就是我要开始的地方。

于 2013-02-09T00:20:39.147 回答