JavaURLEncode空格转换为“+”号问题
问题
最近做⼀个URL拼接的函数,需要将⽤户名拼接到url上。因为⽤户名可能会有特殊字符,所以需要进⾏urlencode。这⾥我使⽤的是java的urlEncode⽅式。问题代码可以提炼如下:
url编码处理public static void main(String[] args)throws UnsupportedEncodingException, EncoderException, DecoderException {
String source ="hello,  张三1+";
String encodeStr = de(source,"UTF-8");
String decodeStr = URLDecoder.decode(encodeStr,"UTF-8");
System.out.println("原⽣编码后:"+ encodeStr);
System.out.println("原⽣解码后:"+ decodeStr);
String encodeStr1 =new URLCodec().encode(source);
String decodeStr1 =new URLCodec().decode(encodeStr);
System.out.println("Apache Common 编码后:"+ encodeStr1);
System.out.println("Apache Common 解码后:"+ decodeStr1);
}
运⾏后结果如下:
原⽣编码后:hello%2C++%E5%BC%A0%E4%B8%891%2B
原⽣解码后:hello,  张三1+
Apache Common 编码后:hello%2C++%E5%BC%A0%E4%B8%891%2B
Apache Common 解码后:hello,  张三1+
从结果⾥可以看到,经过encode之后,空格被转换成了“+”号
这⾥我试了两种⽅式,⼀种是java原⽣的URLEncoder(java.URLDecoder),另⼀种是apache com
mon下的URLCodec类,但是均转换成+号。我将这样的结果给前端,前端说转换有误。空格应该转换为“%20”
原因
Space characters are replaced by `+’
Java官⽅的de 实际上是为了post请求的content-type为x-www-form-urlencoded来设计的。
所以对于get和post两种请求:
如果是post提交:参数的值如果有空格应该编码成+号(注意不是%20)
结尾
因为我这次要拼接的却是是get请求,所以我按照⽹上⼤多数说法,在encode之后再特殊处理⼀下空格
encodeStr = de(content,"UTF-8");
encodeStr = placeAll("\\+","%20");

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。