Android:HTTP中传输加号变成空格的解决方法

本文讨论了在使用HttpURLConnection向后台传输数据时,遇到的特殊字符编码问题,特别是‘+’符号被错误地编码为‘空格’导致后台解密出错的情况。通过替换特殊字符为URL编码格式,即‘%2B’,可以解决此问题,确保数据正确传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:http://www.educity.cn/wenda/127412.html

利用HttpURLConnection向后台传输数据时,传入的参数如下:

		StringBuffer sb = new StringBuffer();
		sb.append("account=").append("admin").append("&");
		sb.append("password=").append("a+b");

其中一个参数中带有“+”符号,当后台接收到时,这个“+”就会被变成空格,导致后台解密出错。

在网上找了些资料,才知道原来是编码:空格被编码成加号,于是传的参数明明是加号,获取的值却成了空格

将以上代码的字符串中的“+”替换成”%2B“即可,如下:

String sendBuf = sb.toString().replace("+", "%2B");









### RestTemplate URL 参数中加号变成空格解决方案 当使用 `RestTemplate` 发送 HTTP 请求时,如果 URL 中包含特殊字符如加号 (`+`) ,可能会遇到该字符被错误地解释为空格的情况。这主要是由于 URL 编码机制所致,在某些情况下,`RestTemplate` 对 URL 进行默认编码处理时会将加号转换为空格。 为了确保 URL 中的加号不会被误认为空格,可以采取以下几种方法解决问题: #### 方法一:手动替换加号为 `%20` 一种简单的解决办法是在构建最终发送给服务器的 URL 前,先对手动编译后的 URL 字符串中的加号进行替换操作,将其替换成其对应的百分比编码形式即 `%20` 。这种方式适用于已知具体哪些位置可能出现加号的情形下[^2]。 ```java String encodedUrl = originalUrl.replace("+", "%20"); ``` 这种方法虽然直接有效,但在实际应用中可能不够灵活,特别是对于动态生成的 URL 或者复杂的查询条件来说不太适用。 #### 方法二:自定义 UriComponentsBuilder 实现更精确控制 另一种更为推荐的方式是利用 Spring 提供的 `UriComponentsBuilder` 工具类来自定义 URI 构建过程,并显式指定如何对待特定字符。这样可以在创建请求之前就正确设置好所有的参数值及其编码规则,从而避免后续不必要的麻烦[^3]。 ```java import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; // 使用 UriComponentsBuilder 来安全地构建带有特殊字符的 URL UriComponents uriComponents = UriComponentsBuilder.fromHttpUrl(baseUrl) .queryParam("paramName", "value with + sign") .build(true); // true 表示自动对参数进行编码 String finalUrl = uriComponents.toUriString(); restTemplate.getForObject(finalUrl, String.class); ``` 通过上述两种途径之一即可有效地防止 `RestTemplate` 将 URL 参数里的加号(`+`) 错误解析为空格的问题发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值