5

我创建 NSMutableUrlRequest 用于向服务器发送数据,向其中添加所有必要的字段,然后添加用于发送的字符串,如下所示:

[theRequest setHTTPBody:[postString dataUsingEncoding: NSUTF8StringEncoding]];

postString 是一个普通的 NSString。

问题是,当我在服务器上收到此请求时,所有加号 (+) 都会从 http 正文中消失。因此,如果我在 iPhone 上有“abcde+fghj”,我会在服务器上得到“abcde fghj”。

这可能是使用 dataUsingEncoding: NSUTF8StringEncoding 的一些编码问题吗?还是一些 NSMutableUrlRequest 剥离功能?我该怎么做才能让它停止剥离加号?我需要在服务器端接收 UTF8 字符串。

4

3 回答 3

4

加号 (+) 是URL 查询字符串部分中空格的标准快捷方式。如果您想要文字 +,请将其编码为 %2b。

于 2010-03-22T10:39:42.110 回答
0

可能是服务器不知道 POST 正文的编码是什么。您是否尝试将 charset=UTF-8 添加到请求的标头中,如下所示:

[theRequest setValue:@"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
于 2010-03-22T10:53:15.500 回答
0

例如,您需要data使用"Content-Type" -> "application/x-www-form-urlencoded"

application/x-www-form-urlencoded:键和值编码在键值元组中,用'&'分隔,键和值之间有'='。键和值中的非字母数字字符都是百分比编码的:这就是为什么这种类型不适合与二进制数据一起使用的原因(改用 multipart/form-data)

参考

您可以通过将函数addingPercentEncoding应用于 Swift 中的字符串来对数据进行百分比编码:

guard let jsonString = String(data: jsonData, encoding: .utf8)?.addingPercentEncoding(withAllowedCharacters: .alphanumerics) else {
   failureCompletion()
   return
}

var request = URLRequest(url: url)
...
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.httpBody = "jsonString".data(using: .utf8)
...
于 2019-08-13T11:23:33.777 回答