0

0

Java中的URLDecoder和URLEncoder怎么用_解决中文URL乱码的方法

P粉602998670

P粉602998670

发布时间:2026-03-17 08:37:45

|

254人浏览过

|

来源于php中文网

原创

必须用URLDecoder.decode(s, "UTF-8")显式指定编码,单参数版本在Java 10+已弃用且依赖平台默认编码易导致中文解码异常;URLEncoder编码后需将+替换为%20以符合RFC 3986;Spring Boot需配置server.tomcat.uri-encoding=UTF-8防容器提前错误解码。

java中的urldecoder和urlencoder怎么用_解决中文url乱码的方法

URLDecoder.decode() 解码中文时抛 UnsupportedEncodingException 怎么办

Java 8+ 默认用 UTF-8,但老代码或没显式指定编码时,URLDecoder.decode(String s) 会走平台默认编码(比如 Windows 上是 GBK),一解中文就崩。这不是 bug,是历史包袱。

  • 必须用双参数重载:URLDecoder.decode(s, "UTF-8"),别偷懒只传一个参数
  • 如果输入可能来自不可信来源(比如旧浏览器、嵌入式设备),先检查字符串是否含 % 编码,避免对已解码串重复解码——会抛 IllegalArgumentException
  • 注意:JDK 10+ 的 URLDecoder.decode() 单参数版本已被标记为 @Deprecated,编译会警告

URLEncoder.encode() 编码后空格变成 + 而不是 %20,影响 API 调用

这是 RFC 3986 和早期 HTML 表单规范的差异所致。URLEncoder 是为 application/x-www-form-urlencoded 设计的,它把空格转成 +,而标准 URL 路径/查询参数里空格该是 %20

  • 路径部分(如 https://api.com/user/张三)不能用 URLEncoder 直接编码;得先用 URLEncoder.encode("张三", "UTF-8") 得到 %E5%BC%A0%E4%B8%89,再手动把 + 替换成 %20(其实空格不会出现,但其他字符如 /? 也不该被编码)
  • 查询参数值(如 ?name=张三)可以用 URLEncoder.encode(),但记得之后把 + 换成 %20 才符合现代 HTTP 客户端要求(OkHttp、Spring WebClient 都期望这样)
  • 更稳妥的做法:用 java.net.URI 构造器,它内部按 RFC 3986 处理,自动区分 scheme、path、query 各自的编码规则

Spring Boot 里 @RequestParam 接收中文参数还是乱码?别只盯 URLDecoder

乱码往往不在解码环节,而在请求进来前就被 Servlet 容器“提前解码”了。Tomcat 8.5+ 默认用 ISO-8859-1 解码 query string,遇到中文直接变 ??

  • application.properties 加:server.tomcat.uri-encoding=UTF-8(Spring Boot 2.3+ 可省略,但低版本必须加)
  • 如果用了 Nginx 做反向代理,确认它没做二次解码:proxy_set_header X-Original-URI $request_uri; 这类操作可能导致重复解码
  • @RequestParam 底层确实调用了 URLDecoder.decode(),但前提是容器没在你之前搞砸——所以先查 request.getQueryString() 原始值是否已是乱码,再决定修哪一层

替代方案:用 java.net.URLEncoder / URI 比手写 URLDecoder 更可靠

直接拼接字符串 + 手动 URLDecoder 容易漏掉边界情况,比如路径中本就存在的 %(非编码用途)、混合中英文+符号的组合。

NameGPT名称生成器
NameGPT名称生成器

免费AI公司名称生成器,AI在线生成企业名称,注册公司名称起名大全。

下载

立即学习Java免费学习笔记(深入)”;

  • 构造完整 URL 优先用 new URI(scheme, userInfo, host, port, path, query, fragment),它会对各段自动做合规编码
  • 只编码某一段(比如 path 中的文件名):用 URLEncoder.encode(filename, "UTF-8").replace("+", "%20"),然后拼进 URI 或字符串
  • 别用 String.replace("%", "%25") 这种野路子预处理——会把原本合法的 %20 变成 %2520,越修越错

真正麻烦的不是怎么编解码,而是得时刻分清:这个字符串是 raw path segment?是 form-data value?还是 query parameter value?每种语境下,哪些字符该编码、用什么规则、谁负责解码——差一层,中文就丢一次。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
如何配置Tomcat环境变量
如何配置Tomcat环境变量

配置Tomcat环境变量需要在系统中添加CATALINA_HOME变量,并将Tomcat的安装路径添加到PATH变量中。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

117

2023.10.26

idea如何集成Tomcat
idea如何集成Tomcat

idea集成Tomcat的步骤:1、添加Tomcat服务器配置;2、配置项目部署;3、运行Tomcat服务器;4、访问项目;5、注意事项;6、关闭Tomcat服务器。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

173

2024.02.23

怎么查看Tomcat源代码
怎么查看Tomcat源代码

查看Tomcat源代码的步骤:1、下载Tomcat源代码;2、在IDEA中导入Tomcat源代码;3、查看源代码;4、理解Tomcat的工作原理;5、参与社区和贡献;6、注意事项;7、持续学习和更新;8、使用工具和插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

99

2024.02.23

常见的tomcat漏洞有哪些
常见的tomcat漏洞有哪些

常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

170

2024.02.23

tomcat日志乱码怎么解决
tomcat日志乱码怎么解决

tomcat日志乱码的解决办法:1、修改tomcat的日志编码设置;2、检查ide的编码设置;3、检查操作系统的编码设置;4、使用过滤器处理日志;5、检查外部系统的编码设置;6、检查文件编码方式等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

159

2024.02.23

weblogic和tomcat有哪些区别
weblogic和tomcat有哪些区别

weblogic和tomcat的区别:1、功能;2、性能;3、规模;4、价格;5、安全性;6、配置和管理;7、社区支持;8、集成能力;9、升级和更新;10、可靠性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

200

2024.02.23

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

245

2024.02.23

tomcat启动闪退怎么解决
tomcat启动闪退怎么解决

tomcat启动闪退的解决办法:1、检查java环境;2、检查环境变量配置;3、检查端口被占用;4、检查配置文件编码;5、检查启动时需要的配置文件;6、检查相关文件是否丢失;7、检查防火墙和杀毒软件设置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

169

2024.02.23

chatgpt使用指南
chatgpt使用指南

本专题整合了chatgpt使用教程、新手使用说明等等相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.5万人学习

C# 教程
C# 教程

共94课时 | 11.5万人学习

Java 教程
Java 教程

共578课时 | 83.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号