java文件下载中文文件名乱码,java 文件下载 乱码
网开发下载文件功能(代码如下),文件名如果带有中文,经常会出现乱码现象,需要进行编码。
字符串文件名=测试文件. doc ;
尝试{
响应响应=
(http servlet响应)facescontext。getcurrentinstance().getExternalContext().getResponse();
回应。设置标题(内容-处置,附件;fileName= fileName);
回应。setcontentlength((int)文件。length());
回应。设置内容类型(‘应用程序/八位字节流;charset=UTF-8 );
字节[] b=新字节[1024];
int I=0;
文件输入流fis=新文件输入流(文件);
ServletOutputStream out=response。获取输出流();
while ((i=fis.read(b)) 0) {
out.write(b,0,I);
}
出去。flush();
出局.关闭
fis。close();
} catch (IOException e) {
e。printstacktrace();
}
facescontext。getcurrentinstance().响应完成();
返回null方案一:将文件名编码为Unicode
fileName=URLEncoder.encode(文件名,‘UTF-8’);文件名会转换为统一码编码,在工业管理学(工业工程)浏览器下测试正常,但是火狐浏览器浏览器下测试得到的文件名是没有解码的统一码编码。
方案二:将文件名编码为ISO-8859-1
文件名=新字符串(fileName.getBytes(UTF-8 ), ISO-8859-1 );这种方式在工业管理学(工业工程)下和火狐浏览器下均可以得到中文文件名的文件。但如果文件名中带有空格,火狐会从空格处截断文件名,需要在编码之前将文件名中的空格替换成下划线之类的可见字符。
文件名=新字符串(文件名.替换(, _ ).getBytes(UTF-8 ), ISO-8859-1 );方案三:浏览器不兼容
在爪哇的网开发中,文件下载功能的文件名文件名乱码问题是经常遇到的。对于这个问题,不同的浏览器,解决的方法不太一样。
工业管理学(工业工程)的话,通过URLEncoder对文件名进行UTF8编码,而其他的浏览器(火狐、chrome、safari、opera),则要通过字节转换成ISO8859-1了。
如果(请求。获取标题(“用户代理”).toUpperCase().indexOf(MSIE) 0) {
filename=URLEncoder.encode(文件名,‘UTF-8’);
}否则{
文件名=新字符串(filename.getBytes(UTF-8 ), ISO8859-1 );
}推荐教程:java开发入门以上就是爪哇岛下载文件时文件名乱码的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。