java 下载文件的文件名乱码_java下载文件名乱码解决方法介绍

java 下载文件的文件名乱码_java下载文件名乱码解决方法介绍javaWeb 开发下载文件功能 代码如下 文件名如果带有中文 经常会出现乱码现象 需要进行编码 推荐 java 视频教程 StringfileNa 测试文件 doc try HttpServletR HttpServletR FacesContext getCurrentIn getExternalC

c1219d64d9ca528b5dd8b7823f4a9e02.png

java Web开发下载文件功能(代码如下),文件名如果带有中文,经常会出现乱码现象,需要进行编码。(推荐:java视频教程)String fileName = “测试文件.doc”;try { HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse(); response.setHeader(“Content-disposition”, “attachment; filename=” + fileName); response.setContentLength((int) file.length()); response.setContentType(“application/octet-stream;charset=UTF-8”); byte[] b = new byte[1024]; int i = 0; FileInputStream fis = new FileInputStream(file); ServletOutputStream out = response.getOutputStream(); while ((i = fis.read(b)) > 0) { out.write(b, 0, i); } out.flush(); out.close; fis.close();} catch (IOException e) { e.printStackTrace();}FacesContext.getCurrentInstance().responseComplete();return null;

方案一:将文件名编码为UnicodefileName = URLEncoder.encode(fileName, “UTF-8”);

文件名会转换为Unicode编码(%E6%B5%8B%E8%AF%95%E6%96%87%E4%BB%B6.doc),在IE浏览器下测试正常,但是Firefox浏览器下测试得到的文件名是没有解码的Unicode。

方案二:将文件名编码为ISO-8859-1fileName = new String(fileName.getBytes(“UTF-8”), “ISO-8859-1”);

这种方式在IE下和Firefox下均可以得到中文文件名的文件。但如果文件名中带有空格,Firefox会从空格处截断文件名,需要在编码之前将文件名中的空格替换成下划线之类的可见字符。fileName = new String(fileName.replace(” “, “_”).getBytes(“UTF-8”), “ISO-8859-1”);

方案三:浏览器不兼容

在Java的web开发中,文件下载功能的文件名文件名乱码问题是经常遇到的。

对于这个问题,不同的浏览器,解决的方法不太一样。

IE的话,通过URLEncoder对filename进行UTF8编码。

而其他的浏览器(firefox、chrome、safari、opera),则要通过字节转换成ISO8859-1了。if (request.getHeader(“User-Agent”).toUpperCase().indexOf(“MSIE”) > 0) { filename = URLEncoder.encode(filename, “UTF-8”);} else { filename = new String(filename.getBytes(“UTF-8”), “ISO8859-1”);}

更多java知识请关注java基础教程栏目。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177784.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午6:45
下一篇 2026年3月26日 下午6:45


相关推荐

  • 信道估计LS和MMSE_盲信道估计

    信道估计LS和MMSE_盲信道估计信道估计之LS在无线通信系统中,系统的性能主要受到无线信道的制约。基站和接收机之间的传播路径复杂多变,从简单的视距传输到受障碍物反射、折射、散射影响的传播。在无线传输环境中,接收信号会存在多径时延,时间选择性衰落和频域偏移,多径时延会带来符号串扰(ISI),可以通过插入保护间隔来减少;而由于时间选择性衰落和频率偏移带来的子载波干扰(ICI),除了依靠时频偏补偿来纠正外,还需要对信道进行估计,进一步进行补偿,即需要进行频域均衡和时域均衡。因此,信号估计性能的好坏直接影响接收信号的解调结果。这里对均衡技术就不

    2025年7月10日
    8
  • 《自然语言处理实战入门》 —- 第4课 :中文分词原理及相关组件简介 之 语言学与分词技术简介…

    《自然语言处理实战入门》—-第4课:中文分词原理及相关组件简介之语言学与分词技术简介https://edu.csdn.net/course/play/20769/25954…

    2022年4月8日
    69
  • oracle拼接字符串函数_拼接字符串

    oracle拼接字符串函数_拼接字符串concat(param1,param2)

    2026年2月2日
    7
  • C++ getline() 和 get()

    C++ getline() 和 get()字符串输入问题 include iostream usingnamespa intmain constintAsiz 20 charname Asize chardessert Asize cout lt lt Enteryournam lt iostream

    2026年3月18日
    2
  • 电商后台管理系统项目介绍和项目初始化

    电商后台管理系统项目介绍和项目初始化目录一电商项目基本业务概述二电商后台管理系统功能三电商后台管理系统的开发模式(前后端分离)四电商后台管理系统的技术选型五前端项目初始化步骤六创建新项目七安装element-UI插件八配置element-UI为按需导入九安装axios十码云上创建vue_shop仓库,将初始化项目托管到码云一电商项目基本业务概述根据不同的应用场景,电商系统一般都提供了PC端、移动APP、移动Web、微信小程序等多种终端访问方式。二电商后…

    2022年6月4日
    47
  • 打印机服务器显示未连接,解决win10打印机提示“无法连接打印机 后台处理程序未运行”的方法…

    打印机服务器显示未连接,解决win10打印机提示“无法连接打印机 后台处理程序未运行”的方法…如今大家在办公室中最常见的两样设备就数电脑和打印机了吧?办公人员对于打印机的使用是非常频繁的,每天都要使用。因此一旦打印机出现故障就会对我们的工作效率产生影响。近日有用户将电脑升级为win10之后发现自己的打印机不能正常的运行,每次点击打印之后就会出现:“无法连接到打印机,后台处理程序未运行”的提示。不知道你遇到这个故障的时候是如何解决的,若是还没有找到解决的方法可以使用下面的教程进行处理哦!方法…

    2022年5月1日
    157

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号