我创建了用于向服务器发送数据的NSMutableUrlRequest,向其中添加所有必需的字段,然后添加要发送的字符串,如下所示:
[theRequest setHTTPBody:[postString dataUsingEncoding: NSUTF8StringEncoding]];postString是一个常见的NSString。
问题是,当我在服务器上收到这个请求时,所有的加号(+)都从http主体中消失了。所以如果我在iPhone上有"abcde+fghj“,我会在服务器上得到"abcde fghj”。
这会不会是使用dataUsingEncoding: NSUTF8StringEncoding时的一些编码问题?或者是一些NSMutableUrlRequest剥离功能?我该怎么做才能让它停止剥离加号标志?我需要在服务器端接收UTF8字符串。
发布于 2010-03-22 18:39:42
加号(+)是表示standard shortcut查询字符串部分中空格的符号。如果需要文字+,请将其编码为%2b。
发布于 2010-03-22 18:53:16
可能是服务器不知道哪个是帖子主体的编码。您是否尝试过将charset=UTF-8添加到请求的头部中,如下所示:
[theRequest setValue:@"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];发布于 2019-08-13 19:23:34
例如,您需要使用"Content-Type" -> "application/x-www-form-urlencoded"将data发布到后端
应用程序/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)
...https://stackoverflow.com/questions/2491351
复制相似问题