下载文件时,文件名乱码问题

2016/11/17 问题一箩筐

在文件下载时通过在报文头中设置文件名来设置下载的文件名。例

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

但假如文件名为中文的时候,会发现文件名乱码。处理方法是讲文件名根据不同的浏览器转码。

/**
 * 根据不同浏览器将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名.
 * 
 * @param s
 *            原文件名
 * @return 重新编码后的文件名
 */
public static String toUtf8String(HttpServletRequest request, String s) {
    String agent = request.getHeader("User-Agent");
    try {
        boolean isFireFox = (agent != null && agent.toLowerCase().indexOf(
                "firefox") != -1);
        if (isFireFox) {
            s = new String(s.getBytes("UTF-8"), "ISO8859-1");
        } else {
            s = toUtf8String(s);
            if ((agent != null && agent.indexOf("MSIE") != -1)) {
                // see http://support.microsoft.com/default.aspx?kbid=816868
                if (s.length() > 150) {
                    // 根据request的locale 得出可能的编码
                    s = new String(s.getBytes("UTF-8"), "ISO8859-1");
                }
            }
        }
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return s;
}

Search

    欢迎关注我的微信公众号

    Yannis的程序人生

    Table of Contents