0

0

如何在Java中进行URL编码与解码_URLEncoder与URLDecoder乱码解决

P粉602998670

P粉602998670

发布时间:2026-03-17 09:53:01

|

601人浏览过

|

来源于php中文网

原创

URLEncoder.encode()乱码的根本原因是默认使用ISO-8859-1编码,而中文字符串实际为UTF-8字节流,必须显式指定"UTF-8"字符集;解码时也需严格匹配编码字符集,且Spring等框架已自动处理@RequestParam等参数的UTF-8解码,重复解码会导致乱码。

如何在java中进行url编码与解码_urlencoder与urldecoder乱码解决

Java里URLEncoder.encode()为什么总出乱码

根本原因是它默认按ISO-8859-1编码,而你传入的中文字符串实际是UTF-8字节流,不显式指定字符集就会把UTF-8字节当ISO-8859-1解析,结果就是乱码。

必须强制指定UTF-8——这是唯一靠谱的做法:

String encoded = URLEncoder.encode("你好", "UTF-8"); // ✅ 正确

常见错误包括:

  • 漏写第二个参数,用URLEncoder.encode(String)重载(已废弃,且默认ISO-8859-1)
  • 传错字符集名,比如写成"utf8""UTF8"(必须是"UTF-8"
  • 在Web容器里混用不同编码上下文(如Tomcat默认用ISO-8859-1解URL,需额外配置)

URLDecoder.decode()解码失败的典型场景

解码失败往往不是函数本身问题,而是前后端编码不一致导致的“错配”。比如前端用encodeURIComponent("中文")(UTF-8),后端却用URLDecoder.decode(s, "ISO-8859-1")去解。

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

实操要点:

AI改图神器
AI改图神器

AI万能图片编辑器,一键抠图,去水印,智能图片美化,照片转漫画,照片变活转视频,图片无损放大,一键背景虚化,位图智能转矢量图

下载
  • 解码时字符集必须和编码时完全一致,通常是"UTF-8"
  • 如果原始字符串来自HTTP请求(如GET参数),要确认Servlet容器是否已帮你做过一次解码(Tomcat 8+默认对query string自动UTF-8解码,再调用URLDecoder.decode()就可能二次解码出错)
  • 遇到IllegalStateException: URLDecoder: Incomplete trailing escape (%),说明输入含残缺的%xx序列,需先校验或过滤非法输入

别直接用URLEncoder拼接URL路径

URLEncoder设计目标是编码表单数据(application/x-www-form-urlencoded),它会把空格转成+、斜杠/转成%2F等。但如果你在构造URL路径(比如https://api.com/user/张三),这些转换会让路径语义失效。

正确做法:

  • 只对路径中「参数值」部分单独编码,比如name=张三里的张三
  • 路径分隔符/、冒号:、问号?等保留字符不能被URLEncoder处理
  • 更安全的选择是用java.net.URI构造器:
    URI uri = new URI("https", "api.com", "/user/" + URLEncoder.encode("张三", "UTF-8"), null);
    它会自动处理各部分的合法编码边界

Spring Boot里参数自动解码的坑

Spring MVC默认对@RequestParam@PathVariable做了一次UTF-8解码,所以你通常不需要手动调用URLDecoder.decode()。手动再解一次,就会把已经解好的中文又按UTF-8重新解释一遍字节,结果变成乱码。

怎么判断要不要自己解?

  • 如果参数来自@RequestParam@PathVariable,直接用,别碰URLDecoder
  • 如果参数来自HttpServletRequest.getQueryString()getRawParameterMap()这类“原始字符串”,才需要自己解码
  • 检查server.tomcat.uri-encoding配置(默认UTF-8),避免和Spring行为冲突

最常被忽略的是:你以为自己在解码,其实框架早就替你做了;而你以为框架没做,结果自己多解了一次。这个边界不厘清,乱码问题永远反复出现。

热门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

Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建
Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建

本指南详解Nginx在Windows、macOS及Linux系统的安装全流程。涵盖官方包解压、Homebrew一键部署、APT/YUM源配置及Docker容器化方案。无论新手或开发者,均可快速搭建运行环境,掌握跨平台核心指令,为后续配置与调优奠定坚实基础。

10

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号