java中url编码解码核心是urlencoder和urldecoder类,必须显式指定utf-8编码,仅对参数值编码而非整url,编码将空格转为+、特殊字符转%xx,解码需严格匹配编码时的字符集,否则中文乱码。

URL 编码:把字符串转成安全的 URL 格式
URL 编码会将空格变成 +,其他特殊字符(如中文、&、=、/ 等)转为 %xx 形式,符合 application/x-www-form-urlencoded 规范。
- 调用
URLEncoder.encode(String, String),第二个参数传"UTF-8" - 注意:该方法会抛出
UnsupportedEncodingException,需 try-catch 或声明异常 - 编码后字符串中,空格是
+,不是%20;若需严格用%20,可后续 replace("+", "%20")
示例:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
String input = "Hello 世界?key=测试&val=1+2"; String encoded = URLEncoder.encode(input, "UTF-8"); // 输出:Hello+%E4%B8%96%E7%95%8C%3Fkey%3D%E6%B5%8B%E8%AF%95%26val%3D1%2B2
URL 解码:把编码后的字符串还原为原始内容
解码过程必须使用和编码时**完全相同的字符集**,否则中文会显示为乱码(如 )或解码失败。
- 调用
URLDecoder.decode(String, String),同样传"UTF-8" - 该方法也会抛出
UnsupportedEncodingException - 自动把
+恢复为空格,%xx还原为对应字符
示例:
String encoded = "name%3D%E5%BC%A0%E4%B8%89%26age%3D25"; String decoded = URLDecoder.decode(encoded, "UTF-8"); // 输出:name=张三&age=25
常见陷阱与注意事项
实际开发中容易忽略但影响功能的关键细节:
-
不要对整个 URL 直接编码:只应对 URL 中的参数值(如 query value、path segment)单独编码,而非整个 URL 字符串。例如
https://api.com?q=你好应只编码"你好",而不是整串 -
路径部分建议用 URI 而非 URL 编码:如果涉及路径(如 `/user/张三`),更推荐用
java.net.URI构造,它内部会正确处理路径编码;URLEncoder 是为表单数据设计的 -
+ 和 %20 的区别:URLEncoder 用
+表示空格,但标准 HTTP 协议也接受%20。某些服务端可能严格区分,必要时可统一替换 -
不支持的字符集会抛异常:JDK 8+ 默认支持 UTF-8,但硬编码
"GBK"等需确认运行环境是否支持
替代方案:现代写法(Java 15+ 推荐)
如果项目使用较新 JDK,也可借助 java.net.URI 构造器间接完成安全编码:
- 对路径段:用
URI.create("https://host/" + URLEncoder.encode(pathPart, "UTF-8")) - 更健壮的方式是分段构造 URI:
new URI(scheme, userInfo, host, port, path, query, fragment),它会自动编码各组成部分
这种方式避免手动拼接错误,适合构建完整 URL 场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










