我创建NSMutableUrlRequest用于向服务器发送数据,向其添加所有必需的字段,然后添加用于发送的字符串,如下所示:
[theRequest setHTTPBody:[postString dataUsingEncoding: NSUTF8StringEncoding]];
postString是一个常见的NSString。
问题是,当我在服务器上收到此请求时,所有加号(+)都会从http正文中消失。所以如果我在iPhone上有“abcde + fghj”,我会在服务器上获得“abcde fghj”。
这可能是使用dataUsingEncoding的一些编码问题:NSUTF8StringEncoding?还是一些NSMutableUrlRequest剥离功能?我该怎么做才能让它停止剥离加号?我需要在服务器端接收UTF8字符串。
答案 0 :(得分:4)
在URL的查询字符串部分中,空格的加号(+)是standard shortcut。如果你想要一个文字+,将其编码为%2b。
答案 1 :(得分:0)
可能是服务器不知道哪个是POST正文的编码。 您是否尝试将charset = UTF-8添加到请求的标题中:
[theRequest setValue:@"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
答案 2 :(得分:0)
例如您需要将data
张贴到后端"Content-Type" -> "application/x-www-form-urlencoded"
application / x-www-form-urlencoded:键和值编码在 键值元组以“&”分隔,键和 值。键和值中的非字母数字字符均为百分比 编码:这就是为什么此类型不适合与 二进制数据(改为使用multipart / form-data)
您可以通过在Swift中将函数addingPercentEncoding
应用于字符串来对数据进行百分比编码:
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)
...