freemarker 读取template.xml ,通过response 输出文件,解决中文乱码问题
采用
try (Writer writer = new OutputStreamWriter(os, “UTF-8”))
UTF-8 内容转换
public static void setResponseHeader(HttpServletResponse response, String fileName) {
try {
// fileName = "中文.xls";
try {
fileName = new String(fileName.getBytes(),"ISO8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setContentType("application/octet-stream;charset=UTF-8");
//response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename="+ fileName);//
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
public void xml2XmlOutFromResources(HttpServletResponse response, Map<String, Object> dataMap, String templetFile, String fileName) throws IOException, TemplateException {
//设置响应头
ExportExcel.setResponseHeader(response, fileName);
Configuration configuration = new Configuration(Configuration.VERSION_2_3_28);
configuration.setDefaultEncoding("UTF-8");
configuration.setClassLoaderForTemplateLoading(this.getClass().getClassLoader(), "");
Template template = null;
try {
template = configuration.getTemplate("templates/exportTemplate.xml","UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
//模板和数据模型合并生成文件
OutputStream os = null;
try {
os = response.getOutputStream();
try (Writer writer = new OutputStreamWriter(os, "UTF-8")) {
template.process(dataMap, writer);
}
} catch (Exception ex) {
} finally {
try {
if (os != null) {
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}