Http下载文件,文件名中文乱码问题

1.文件名

要设置下载文件的文件名,需要在response的Header中加入Content-disposition

    String fileName = "fileName.xx";
    response.setHeader("Content-disposition","attachment;filename=" + fileName)

2.解决中文乱码

如果文件名是中文,需要转码为UTF-8才行

    String fileName = java.net.URLEncoder.encode("文件名.xx", "UTF-8");
    response.setHeader("Content-disposition","attachment;filename=" + fileName)

3.解决firefox中文乱码

转码后,在ie和谷歌浏览器中可以成功,
但是火狐中文件名中的中文,显示为转码后的结果,需要一些特别的设置

-参考http下载文件,中文文件名在firefox下乱码问题

    String fileName = java.net.URLEncoder.encode("文件名.xx", "UTF-8");
    //火狐中 下载文件名会显示java.net.URLEncoder.encode转码后的结果,而不是中文
    if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) 
        response.setHeader("Content-disposition",
                "attachment;filename*=utf-8'zh_cn'" + fileName);
    else 
        response.setHeader("Content-disposition","attachment;filename=" +  fileName);

你可能感兴趣的:(Java)