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();}}}