http下载文件,中文名称乱码

用户使用不同的浏览器下载文件的时候,在一些情况下会出现中文乱码的情况:

用户在国产操作系统使用低版本firefox,使用国产中间件进行文件下载时,会出现中文乱码,甚至有时候中文不显示的问题。

问题原因,有可能是浏览器默认编码问题,也有可能是中间件处理问题。但是这些我们都不可控。

假如,程序里面使用UTF-8编码。

解决一:

低版本firefox默认使用了iso-8851-1.所以可以在其中判断是哪种浏览器,对文件件名进行编码

//根据浏览器种类进行不同编码
if (getBrowser(request).equals("FF")) {//如果是火狐,解决火狐中文名乱码问题
            fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
        }

response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");

附:

//获取浏览器种类,此处只列举了简单几种
private String getBrowser(HttpServletRequest request) {
        String header = request.getHeader("USER-AGENT");
        if (header != null) {
            String UserAgent = header.toLowerCase();
            if (UserAgent != null) {
                if (UserAgent.indexOf("msie") >= 0) {
                    return "IE";
                } else if (UserAgent.indexOf("firefox") >= 0) {
                    return "FF";
                } else if (UserAgent.indexOf("safari") >= 0) {
                    return "SF";
                }
            }
        }

        return "";
    }

解决二:

但是对于中间件产生问题,上述方法就不能起作用了。

根据https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Disposition

 

“Content-Disposition”的参数中,filename有两种方式。

filename*后可以指定文件名的编码

"Content-Disposition"         "attachment;filename*=UTF-8''中文.txt"

String dispositionHeader = "attachment;filename*=UTF-8''" + fileName + "";

response.setHeader("Content-Disposition", dispositionHeader);

这样,不论在什么浏览器,均可以正常下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下载文件时,如果文件名称中包含中文字符,有时会出现码问题。这个问题可以通过对文件名称进行编码来解决。例如,在使用Java进行文件下载时,可以使用java.net.URLEncoder.encode方法对文件名称进行预处理。而在某些情况下,比如在国产操作系统低版本的Firefox浏览器中,使用国产中间件进行文件下载时,也可能会出现中文码的问题。针对这种情况,可以根据浏览器类型进行不同的编码处理,比如判断是火狐浏览器,可以使用getBytes方法将文件名称从UTF-8编码转换为iso-8859-1编码,以解决中文码问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [解决下载文件中文名称码问题](https://blog.csdn.net/weixin_43416686/article/details/125856305)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [http下载文件中文名称码](https://blog.csdn.net/qq_35451480/article/details/112370281)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值