Java文件下载中文名无法显示&乱码

UDS(三)网络层时间参数 网络层定义了N_Ar、N_As、N_Br、N_Bs、N_Cr、N_Cs六个时间参数。 网络层在检测到错误的时间传递至上层使用者 1.当N_As 超时时,即发送方没有及时发送出N_PDU,系统将放弃信息的接收并传递<N_Result> = <N_TIMEOUT_A>的N_USData.comfirm指示 2.当N_Ar超时时,即接收方没有及时发送出N_PDU,系统将放弃信息的接收并传递<N_Result> = <N_TIMEOUT_A>的N_USData.co 阅读详情

最近做了一个文件下载的需求,但是下载的文件名称如果是中文名,下载后出现名称无法显示的问题。查看资料后最终解决了。

原因:  

因为用post方式提交的,所以用Servlet做的,设置的头信息里面需要对文件名称做处理,Header中只支持ASCII,传输的文件名必须是ASCII否则当出现中文名文件时,就出现异常。

在网上找了方法,attachmentPath =  URLEncoder.encode(attachmentPath,"UTF-8");发现这样还是不行,如图:

又重新试了attachmentPath = new String(attachmentPath.getBytes("UTF-8"), "ISO-8859-1");就可以了

代码如下:

 @PostMapping("/download/{attachmentPath}")
    public void exportVehicleInfo(HttpServletRequest req, HttpServletResponse resp,String attachmentPath) {
        
        String fileName=attachmentPath;
        log.info("上传的文件为:" + attachmentPath);
        DataInputStream in = null;
        OutputStream out = null;
        try{
            resp.reset();// 清空输出流
            
            
            resp.setContentType("application/force-download");
            resp.setCharacterEncoding("UTF-8");  
            attachmentPath = new String(attachmentPath.getBytes("UTF-8"), "ISO-8859-1");
            //attachmentPath =  URLEncoder.encode(attachmentPath,"UTF-8");
            resp.setHeader("Content-Disposition", "attachment; filename=" + attachmentPath);// 设定输出文件头

            
            String filePath = "C:\\Users\\Bairong\\Desktop\\Gao\\运营管理平台\\异议数据\\file\\";
            String path = filePath + fileName;
            log.info("上传的文件路径为:" + path);
            //输入流:本地文件路径
            in = new DataInputStream(
                    new FileInputStream(new File(path)));  
            //输出流
            out = resp.getOutputStream();
            //输出文件
            int bytes = 0;
            byte[] bufferOut = new byte[1024];  
            while ((bytes = in.read(bufferOut)) != -1) {  
                out.write(bufferOut, 0, bytes);  
            }
        } catch(Exception e){
            e.printStackTrace();
            resp.reset();
            try {
                OutputStreamWriter writer = new OutputStreamWriter(resp.getOutputStream(), "UTF-8");  
                String data = "<script language='javascript'>alert(\"\\u64cd\\u4f5c\\u5f02\\u5e38\\uff01\");</script>";
                writer.write(data); 
                writer.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }finally {
            if(null != in) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(null != out) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        
    }

ISO-8859-1为什么可以:

RealSense D435i深度相机实战:从像素坐标到三维空间的精准映射(Python实现) 本文详细介绍了使用RealSense D435i深度相机实现从二维像素坐标到三维空间坐标精准映射的两种Python实战方法:深度图反投影法与点云直接查找法。文章涵盖环境搭建、相机对齐、代码实现、性能对比及与YOLO等检测模型结合的进阶应用,并提供了关键的避坑指南和参数调优建议,帮助开发者在机器人、三维重建等项目中高效应用。 阅读详情

相关推荐

Java实现文件下载并解决中文文件乱码

Java实现文件下载并解决中文文件乱码

Java文件下载中文名显示&乱码

Java开发中,文件上传下载是很常用的功能。实际开发中遇到了中文名显示的问题,一开始以为是后台代码的原因,网上查了一些资料,原来是Header中只支持ASCII,传输的文件名必须是ASCII。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 8656

python3.12.8软件包

python3.12.8软件包,方便下载

java 文件下载 中文名乱码 解决

  调用例子:FileUtils.downFile(request, response, filePath, &quot;application/x-msdownload;&quot;); FileUtils.downFile_2(request, response, filePath, &quot;application/x-msdownload;&quot;);   /** * 下载文件 *  * @param f...

spring 436

Java 解决下载文件名中文乱码

Java 解决下载文件名中文乱码问题

weixin_43718297的博客 1811

JAVA文件下载文件名称中文乱码问题

一、场景    java中实现文件下载文件名称出现了中文乱码 二、解决方案    将文件名称的编码转为ISO8859-1 response.setHeader(&quot;Content-Disposition&quot;, &quot;attachment;fileName=&quot;+ new String(file.getName()...

qq_30401609的博客 2807

java文件上传下载文件名包含中文或特殊字符

java文件上传下载文件名包含中文或特殊字符

weixin_45817985的博客 2162

使用FPT上传下载文件和解决中文名文件乱码问题

项目中从ftp服务器下载上传文件是一个经常用到的,下面是个人在用到的时候的一些学习记录。 为了方便,我在本地装了FileZilla Server,在本地搭建了一个ftp服务器,具体如何做就不墨迹了。 先看一个简单的代码(转自别人的) import org.apache.commons.io.IOUtils; import org.apache.commons.net.ftp.FTPClient;

戴眼镜的盲人键盘手 6459

java压缩文件中文名乱码问题

import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; 改为 import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream;ant包里提供ZipOutputStream类的setEncoding("gbk")方法。zos.setEncoding("gbk"); ant包下载(点击进入页面,另开一个新页面) 下载地址如下:.

dxyzhbb的博客 486

java下载文件

 今天,在开发时碰到了下载文件中文名乱码的问题,本来一开始是这样写的 第一种方案: response.setHeader(&quot;Content-disposition&quot;, &quot;attachment;filename=&quot; + URLEncoder.encode(file.getName().getBytes(), &quot;UTF-8&quot;) );// 设置头部信息  这样使我下载文件会出现文件名称中文...

baidu_41660182的博客 247

Java 下载文件文件无法显示中文问题解决

之前我们一般是这样写的: response.setHeader("Content-Disposition", "attachment; filename=" + fileName); 之所以出现下载文件无法显示中文的文件名是因为需要将UTF-8编码转换成ISO-8858-1编码。 response.setHeader("Content-Disposition", "attachment...

旭东怪的博客 3906

java 文件下载 中文文件名不支持导致路径不对

java 文件下载 中文文件名不支持导致路径不对 //浏览器设置 String userAgent = request.getHeader("User-Agent"); if (userAgent.contains("MSIE") || userAgent.contains("Trident")) { //IE浏览器处理 productName = java.net.URLE...

升级打怪 735

JavaWeb客户端下载服务器内含有中文的文件文件显示不正常解决办法

如图所示,网页下载一个含有中文名文件 文件名并没有正常显示 解决方法,对于不同的浏览器,默认的解码方式不一样,需要针对不同的浏览器进行解码,网上下载DownloadUtils工具类,在服务器指定下载文件名的地方,调用该类的getFileName()方法,将原始文件名修改成不同的编码,第一个参数为响应头,第二个请求为原始文件名. 服务器中调用此方法修改filename的值 重新运行服务器,使用火狐浏览器重新打开之前的下载页面,可见中文显示正常. warning:通过此种方法,经过我的测试,可以在Mi

黄大仙 732

java 文件名是中文 导出失败

在导出文件的时候,导出内容是空的。 看了下名字是中文的,然后就把中文改成了英文试了下,导出是正常的。 看了下代码 fileName = URLEncoder.encode(fileName, "UTF-8"); 是有用URLEncoder.encode处理的,应该没啥问题啊。 在header那把utf-8转成英文的charset=iso-8859-1是英文的编码 response.setHeader("Content-Disposition", "atta...

一路向前 1210

Java下载文件文件无法显示中文问题解决。

之所以出现下载文件无法显示中文的文件名是因为编码格式不同,比如:将UTF-8编码转换成ISO-8858-1编码,可以这样写 response.setHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes("utf-8"),"ISO-8859-1")); ...

Miger的博客 1219

Java中文异常——全解

在读取或写入文件时,需要指定正确的字符集。可以使用InputStreamReader和OutputStreamWriter来指定字符集,例如:UTF-8类型的读取。如果在处理中文字符时出现乱码无法正确显示的情况,很可能是由于字符集不匹配导致的。Java中常用的字符集是UTF-8和GBK,确保输入、输出和存储的字符集一致。如果需要对字符串进行编码转换,可以使用String的getBytes和构造函数来指定字符集。在与数据库交互时,需要确保数据库连接和表的字符集设置正确。可以在连接字符串中指定字符集。

红目香薰 2712

JAVA下载文件名含有中文乱码一种少见的解决方案

按照 HTTP 协议的规范,filename 指令值前后是必须加英文双引号 " 的,也就是 filename=“abc.txt” 的形式。但当文件名是 中国.txt,则各个浏览器都出了问题,下载文件名变成了 __.txt。对于以上两难境地,网上多数文章的推荐方式是读取请求头 User-Agent 的值,判断里面是否含有 Firefox 字样,然后对 Firefox 浏览器做分支专门处理。不过笔者不太喜欢这种“分情况讨论”的代码,生怕以后再跳出一种新的浏览器来,又要针对性地写代码。

L_zsen的博客 8831

Java下载文件,中文文件乱码问题解决

  在项目中经常会做下载文件、导出Excel 等问题,经常会遇到乱码,本次从设置UTf_8编码格式和检测浏览器,并设置相关参数的方式解决下载中文乱码问题。直接上代码: Controller层 @RequestMapping("getExcel") public void getUserExcel(HttpServletResponse response, HttpServletRequest re...

Java全栈架构师 1万+

java 用数据流方式下载文件中文名乱码

java 用数据流方式下载文件中文名乱码 response.setContentType("application/octet-stream"); response.setHeader("Content-disposition", "attachment;filename=

qq_43640899的博客 4649

Java下载文件中文名乱码问题解决

【代码】Java下载文件中文名乱码问题解决。

weixin_49863629的博客 892
上一篇: HttpClientUtil工具类,发送get请求和post请求
下一篇: 把html的url里的值传递给下一个html
keep12moving
博客等级 码龄9年 69粉丝 191原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值