【Java文件导出乱码】java导出文件中文名乱码或下划线或百分号解决方法(已解决)附源码

这篇具有很好参考价值的文章主要介绍了【Java文件导出乱码】java导出文件中文名乱码或下划线或百分号解决方法(已解决)附源码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面】其实导出这个功能在业务需求中是很多的,今天我就先不重点介绍导出实现过程,主要给大家讲解一下导出文件时候,文件名是中文的情况下会出现乱码、下划线等现象该如何去解决,如何理性分析。

涉及知识点:java文件导出,中文名乱码,URLEncoder,java下载乱码,java导出中文名百分号字符串

问题复现

中文名乱码

【Java文件导出乱码】java导出文件中文名乱码或下划线或百分号解决方法(已解决)附源码

中文名下划线

【Java文件导出乱码】java导出文件中文名乱码或下划线或百分号解决方法(已解决)附源码

百分号串(%EB%S7%.xlsx)

【Java文件导出乱码】java导出文件中文名乱码或下划线或百分号解决方法(已解决)附源码

中文名正常的模式

【Java文件导出乱码】java导出文件中文名乱码或下划线或百分号解决方法(已解决)附源码

1、下载异常现象原因

1.1 下划线原因

没有做任何处理,直接将中文名塞到header里面,错误的代码如下:

response.setHeader("Content-disposition","attachment; filename=黄大大的街舞梦.xlsx");
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("UTF-8");

1.2 乱码原因

因为错乱使用转义,有些人经常会说用utf-8的ISO-8859-1方式,其实也没有错,但是这个之前应该要做一个encode操作
错误代码如下:

fileName = new String("黄大大的街舞梦.xlsx".getBytes("utf-8"),"ISO-8859-1");
response.setHeader("Content-disposition","attachment; filename="+ fileName);
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("UTF-8");

1.3 %百分号串原因

因为后端使用了encode进行中文转码,但是前端下载接收的时候没有用decode进行解码的操作。
这个主要是前端的问题。

2、解决乱码方式

2.1 源码实现

其实在上面的1.2就很接近正确的模式了,只是针对中文名缺少一个encode的方式,如下所示正确实现代码如下:

fileName = URLEncoder.encode("黄大大的街舞梦.xlsx", "UTF-8");
response.setHeader("Content-disposition","attachment; filename="+ fileName);
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("UTF-8");

所以说问题的核心在于没有对中文进行一个URLEncoder.encode的处理,具体效果如一开始效果图。完整实现导出的文章将在下一篇详解。

2.2 源码分析

可能到这里确实解决了大家的问题,但是呢我们对上面写的东西又了解多少呢?
首先是Content-disposition是啥?其次URLEncoder.encode又是啥,还有utf-8及ISO-8859-1又是啥,我们为啥要从这些方向设置入手?下面请听我一一介绍。

Content-disposition应用

这个是MIME协议的一种扩展,主要目的就是显示待下载的文件,当浏览器接收到请求头后,就会去激活一个下载框,他们的名字需要自己塞值到header里面,从而我们下载的文件名要放这个里面。没有设置它就根本不能触发浏览器下载的那个动作。

URLEncoder.encode应用

URLEncoder.encode后其中fileName如下所示是带有%字母加数字的组合编码形式,其实这个你就可以这么去理解,后端采用这种编码格式,机器能识别,也能塞到头里面有助于传输,但是切记前端收到的时候用decodeURI进行解密哟,不然下载下来的是%E9%BB%之类的乱串。
【Java文件导出乱码】java导出文件中文名乱码或下划线或百分号解决方法(已解决)附源码

utf-8及ISO-8859-1应用(乱码的祸源)

utf-8及ISO-8859-1使用前后的区别相信大家一目了然了。
【Java文件导出乱码】java导出文件中文名乱码或下划线或百分号解决方法(已解决)附源码
【Java文件导出乱码】java导出文件中文名乱码或下划线或百分号解决方法(已解决)附源码
所以说在使用的过程中我们一定不要盲目相信网上的那些抄袭的文章,毕竟实践出真知,我也是自己实践过才敢发布文章的,希望能够得到大家的支持。

最终效果:
【Java文件导出乱码】java导出文件中文名乱码或下划线或百分号解决方法(已解决)附源码

3、彩蛋上皇榜

如有不太清楚的可以留言哈,一起探讨一起进步,期待您的反馈。
如果觉得这篇文章对您有帮助的话,想支持博主的可以上皇榜看看哟,皇榜点击此处进入
文章来源地址https://www.toymoban.com/news/detail-442159.html

到了这里,关于【Java文件导出乱码】java导出文件中文名乱码或下划线或百分号解决方法(已解决)附源码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • win11系统中文名改英文名(win11、win10修改用户名)超详细图文

    win11系统中文名改英文名(win11、win10修改用户名)超详细图文

            本人的电脑的win11家庭版,因为新机刚进入系统一时大意了,错误地将系统用户名写成了中文,导致后面安装和开发软件等等场景会出现一些奇奇怪怪的问题。这里绝大多数的问题都是因为存在中文路径的问题。例如有些软件在安装时会自动将相关用户功能文件安

    2024年02月03日
    浏览(12)
  • Java读取properties文件中文乱码(已解决)

    Java读取properties文件中文乱码(已解决)

    初用properties,读取java properties文件的时候如果value是中文,会出现 乱码 的问题。 在项目的默认路径(src目录)下创建 sk.properties 属性文件(名称可以自定义,扩展名必须为 properties )。 上面的程序执行后的结果会出现中文乱码,因为字节流是无法读取中文的,所以采取read

    2024年02月11日
    浏览(15)
  • Java下载excel文件名中文乱码解决

    我是一名充满激情的程序员,💻希望和大家一起学习进步!我热爱编程,对技术充满好奇心和求知欲! 🗣️无论你是新手还是老手,都能从我的博客中获得有价值的内容! 🚀让我们一起努力,成为更优秀的程序员吧!💪💻 当使用Java下载Excel文件时,有时会遇到文件名中

    2024年02月07日
    浏览(37)
  • Java文件下载中文文件名乱码的解决方案

      大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作

    2024年02月13日
    浏览(36)
  • Java中properties文件中的中文乱码问题

    Java中properties文件中的中文乱码问题

    问题代码:    期望输出应该和上面文件的内容一样,结果中文内容输出的是一堆乱码:  1 张无忌= minmin 2 周芷若= miejue 3 赵敏= wuji 4 admin=123456   可如果将上面  properties.load(new FileInputStream(\\\"day10-special-file-log\\\\src\\\\users.properties\\\"));换成 properties.load(new FileRead

    2024年02月14日
    浏览(8)
  • 解决.properties文件中文读取乱码问题(idea Java)

    解决.properties文件中文读取乱码问题(idea Java)

    1、原始代码 未加读取.properties文件的规则 debug运行截图: 2、加入.properties读取规则 debug截图: 至此 问题已解决!

    2024年02月16日
    浏览(11)
  • Java下载文件,中文文件名乱码问题解决(文件名包含很多%)

    一般情况下,大家都是这样: 其实乱码就是乱在;filename=\\\" + fileName这里,对文件名的编码设定上。 使用URLEncoder.encode(filepath,\\\"UTF-8\\\")虽然可以解决在提示下载框中正确显示汉字文件名的问题,并且在选择保存,然后打开的情况下,文件名称也可以正确的显示。 但是在提示下载框

    2024年02月12日
    浏览(40)
  • java实现浏览器下载附件时文件名中文乱码解决方案

    方案一:URLEncoder 解决 IE 和 谷歌浏览器的附件中文名问题。 如果客户端浏览器是 IE 浏览器 或者 是谷歌浏览器。我们需要使用 URLEncoder 类先对中文名进行 UTF-8 的编码 操作。 因为 IE 浏览器和谷歌浏览器收到含有编码后的字符串后会以 UTF-8 字符集进行解码显示。 方案二:B

    2024年03月09日
    浏览(39)
  • java中获取配置文件路径中含有中文,出现乱码的情况解决方案

    java中获取配置文件路径中含有中文,出现乱码的情况解决方案

    问题背景: 读取配置文件,但是读到的目录信息是中文乱码的。 第一步: 参考代码如上截图,方法即:读取jdbc配置,获取了配置文件(jdbc.properties)地址,然后加载这个文件读取配置信息,但是获取的文件目录的地址中文转译了。 第二步: 设置编码格式为utf-8,查看重新获

    2024年02月16日
    浏览(10)
  • java 发送 http 文件 post,form-data格式的数据,MultipartEntityBuilder addTextBody中文乱码

    java 发送 http 文件 post,form-data格式的数据,MultipartEntityBuilder addTextBody中文乱码

    平常我们对接第三方都是以json的数据进行数据交互的,这次第三方接口只支持form-data格式的表单数据,传json数据对方不支持,通过百度和尝试各种方案最终完美解决,后期再慢慢优化吧。还有一个问题,数据中包含中文的户,到第三方是乱码的,经过百度参考前辈的经验,

    2024年02月13日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包