使用 Hutool 工具类创建 Excel ,写出到客户端下载时中文名称问题。
代码如下:
// 通过工具类创建writer,默认创建xls格式
ExcelWriter writer = ExcelUtil.getWriter();
// 一次性写出内容,使用默认样式,强制输出标题
writer.write(rows, true);
//out为OutputStream,需要写出到的目标流
//response为HttpServletResponse对象
response.setContentType("application/vnd.ms-excel;charset=utf-8");
//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
response.setHeader("Content-Disposition","attachment;filename=xxx工作表格.xls");
ServletOutputStream out=response.getOutputStream();
writer.flush(out, true);
// 关闭writer,释放内存
writer.close();
//此处记得关闭输出Servlet流
IoUtil.close(out);
根据上述代码下载后的文件名如下:
(在使用中文下载中文变与了下划线)
图中的命名与代码命名有出入,请勿较真。
从分析上来看跟编码有很大关系,在把名称转换编码后正常。
解决办法
关键代码如下:
....
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("xxx工作表格", "UTF-8") + ".xls");
....