java 下载文件名 编码
转:java下载文件时文件名乱码 – 智云一二三科技
方案一:将文件名编码为Unicode
fileName = URLEncoder.encode(fileName, "UTF-8");
文件名会转换为Unicode编码,在IE浏览器下测试正常,但是Firefox浏览器下测试得到的文件名是没有解码的Unicode。
方案二:将文件名编码为ISO-8859-1
fileName = 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");
}
关于设置ISO8859-1编码文件名
转:下载文件设置header的filename要用ISO8859-1编码的原因 - 走看看
提取出来最核心的一点,filename=new String("中文文件名".getBytes("utf-8"), "ISO8859-1");
先说为什么使用 ISO8859-1 编码,这个主要是由于http协议,http header头要求其内容必须为iso8859-1编码,所以我们最终要把其编码为 ISO8859-1 编码的字符串;因为ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题
但是前面为什么不直接使用 "中文文件名".getBytes("ISO8859-1"); 这样的代码呢?
因为ISO8859-1编码的编码表中,根本就没有包含汉字字符,当然也就无法通过"中文文件名".getBytes("ISO8859-1");来得到正确的“中文文件名”在ISO8859-1中的编码值了,所以再通过new String()来还原就无从谈起了。
所以先通过 "中文文件名".getBytes("utf-8") 获取其 byte[] 字节,让其按照字节来编码,即在使用 new String("中文文件名".getBytes("utf-8"), "ISO8859-1") 将其重新组成一个字符串,传送给浏览器。
String.getBytes(String decode)
方法会根据指定的decode编码返回某字符串在该编码下的byte数组
new String(byte[], decode)
使用decode指定的编码来将byte[]解析成字符串。
String fileName = "测试";
fileName = new String(fileName.getBytes(), "ISO8859-1");
System.out.println("模拟传输:" + fileName);
//使用iso8859-1编码后 fileName 在这些字符传递到目的地后,目的地程序再通过相反的方式
fileName = new String(fileName.getBytes("ISO8859-1"));
System.out.println("前端得到的文件名:" + fileName);
结果:
模拟传输:æµè¯
前端得到的文件名:测试
java 下载文件名 编码相关推荐
- java下载文件名乱码的解决方法
java下载文件名乱码的解决方法 参考文章: (1)java下载文件名乱码的解决方法 (2)https://www.cnblogs.com/liyabin/p/7891073.html 备忘一下.
- java文件名的编码格式_java下载文件名乱码解决方法详解
java下载文件名乱码的方法:(推荐:java视频教程) 每个浏览器的编码不一样,火狐采用的是base64.ie和谷歌采用的是url编码: 所以我们在设置响应头的时候Content-Type getS ...
- JAVA中下载文件名含有中文乱码一种少见的解决方案
原始代码(未处理含中文和空格的文件名) @RestController public class FileController {@RequestMapping(value = "/down ...
- Java下载文件时文件名出现乱码(但文件内容正常)
今天写文件下载时,发现以前忽略的问题,写个小记录 我们一般使用中文操作系统,所以要求的 文件名编码最好是utf-8,国际化一点 但是,似乎实际上不是这样 1. String fileName=new ...
- java获取gbk文件名 linux_java获取真实的下载地址和下载文件名
2010-04-14 比如有这样一个地址: http://www.vckbase.com/tools/downtools.asp?id=209 用下载工具打开时,能够知道其真实的下载地址和下载名称 请 ...
- java web 下载文件名乱码
Web开发下载文件功能(代码如下),文件名如果带有中文,经常会出现乱码现象,需要进行编码. String fileName = "测试文件.doc"; try {HttpServl ...
- java 下载url图片_java下载url图片链接
1.从之前写的一篇中改写了代码,从远程的url链接中下载图片,并对各种浏览器的中文文件名进行展示 /** * 根据url路径下载图片 * @param filename 处理下载时显示设置好的中文名 ...
- java 文件名乱码_详解关于java文件下载文件名乱码问题解决方案
JAVA文件下载时乱码有两种情况: 1,下载时中文文件名乱码 2,下载时因为路径中包含中文文件名乱码,提示找不到文件 解决方法见下面部分代码 response.setContentType(" ...
- java下载乱码怎么解决_java下载文件出现乱码怎么解决
java下载文件出现乱码怎么解决 发布时间:2020-06-24 13:12:27 来源:亿速云 阅读:108 作者:Leah 这期内容当中的小编将会给大家带来有关java下载文件出现乱码的解决方法, ...
最新文章
- 全文解析:面向基于区块链的「机器人经济学」概念中,如何验证自主智能体的行为?...
- C++设计模式——单例模式
- .net自带的IOC容器MEF使用
- 不忽略空值null的聚合函数_sqlzoo 练习题答案 聚合函数 和 空值 部分
- 3DMine V202006体验版本下载
- 使用后处理Alpha通道丢失的问题
- 3ds Max 布尔(Boolean)运算——象棋的制作
- 达梦数据库解决ZYJ环境数据库连接会闪断的问题
- Codesys配置电子凸轮连接虚轴
- 笔记33 笨办法学python练习40之二:类和对象
- iPhone 等设备电池正式涨价!网友:“苹果是知道怎样割韭菜的……”
- 【web性能】获取web各个阶段响应时间:服务器响应时间、首页白屏时间、dom渲染完成时间等
- linux+记账软件下载,快速记账软件下载-快速记账appv3.11.0-Linux公社
- 自定义柱状图(水滴图)的填坑之路
- 通过Python终端输入命令对NAO机器人进行实时控制
- 立可得_第2章_新零售_重构人、货、场
- 【pytorch模型实现9】HAN_Attention
- 计算机 实验室安全准入制度,华东理工大学实验室安全准入制度
- 资讯:音频编解码器业界最新动态
- 微信小程序 解决按钮点击后e.currentTarget.dataset为空的方法