下载文件中的 UTF-8 编码名称

2022-09-01 11:29:13

我正在尝试让用户下载具有日语名称的excel文件。它似乎只适用于IE 8和其他IE和firefox,它不起作用。请建议我如何忍受这个。

String fileName = dateString+"_マイページ情報.xls";
byte[] data = writer.getData();
response.setContentType("application/ms-excel");
response.setContentLength(data.length);
response.setHeader("Expires:", "0"); // eliminates browser caching
response.setHeader("Content-Disposition","attachment; filename="+URLEncoder.encode(fileName));

答案 1

我把它解决了,如下所示。

fileName = dateString+"_マイページ情報.xls"; 
fileName = URLEncoder.encode(fileName,"UTF-8"); 
try {
        response.setContentType("application/ms-excel; charset=UTF-8");
        response.setCharacterEncoding("UTF-8");
        if(browserType.equals("IE")||browserType.equals("Chrome"))
            response.setHeader("Content-Disposition","attachment; filename="+fileName);
        if(browserType.endsWith("Firefox"))
            response.setHeader("Content-Disposition","attachment; filename*=UTF-8''"+fileName);
    } catch (Exception e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

答案 2

使用方法集字符编码

将发送到客户端的响应的字符编码(MIME 字符集)设置为 UTF-8。如果字符编码已经由 setContentType(java.lang.String) 或 setLocale(java.util.Locale) 设置,则此方法将覆盖它。使用 text/html 的字符串调用 setContentType(java.lang.String) 并使用 UTF-8 的字符串调用此方法等效于使用 text/html 的字符串调用 setContentType;字符集 = UTF-8。

可以反复调用此方法以更改字符编码。如果在调用 getWriter 之后或提交响应后调用此方法,则此方法不起作用。

使用以下命令修改代码:

response.setContentType("application/ms-excel; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition","attachment; filename="+URLEncoder.encode(fileName, "UTF-8"));