Java URLEncoder 编码空格为“+”

使用java.net.URLEncoder编码字符串后会将空格替换为+,导致验签出错或前端不能还原原字符串的空格。

String s = "文件 -文件1";
String encode = URLEncoder.encode(s, StandardCharsets.UTF_8);

结果为:%E6%96%87%E4%BB%B6+-%E6%96%87%E4%BB%B61,空格被替换为+,而不是%20,JS使用DecodeURIComponent得到文件+-文件1

查看源码可得java.net.URLEncoder实现的是`application/x-www-form-urlencoded: https://www.w3.org/TR/html4/interact/forms.html#h-17.13.4

处理方式为:

(1)使用String的replace

URLEncoder.encode("Hello World", "UTF-8").replace("+", "%20");

(2)使用其他类库的方法,例如Spring的UriUtils

UriUtils.encode(fileName, StandardCharsets.UTF_8.name());

参考:https://stackoverflow.com/questions/4737841/urlencoder-not-able-to-translate-space-character

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/25/java-urlencoder-encoding-space-is-plus/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Java URLEncoder 编码空格为“+”
使用java.net.URLEncoder编码字符串后会将空格替换为+,导致验签出错或前端不能还原原字符串的空格。 String s = "文件 -文件1"; String encode = U……
<<上一篇
下一篇>>
文章目录
关闭
目 录