NSMutableUrlRequest吃加号

时间:2010-03-22 10:19:39

标签: iphone nsstring nsdata nsmutableurlrequest

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

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

postString是一个常见的NSString。

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

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

3 个答案:

答案 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)

Reference

您可以通过在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)
...