最近使用thymeleaf进行静态html文件的生成,本来是在网上找的demo,部署起来也挺正常的,但是后来新加一个windows服务器,导致写出来的文件乱码(项目的编码都是UTF-8,包括模板,html文件设置的都是UTF-8)
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
//模板所在目录,相对于当前classloader的classpath。
resolver.setPrefix("thymeleaf/");
//模板文件后缀
resolver.setSuffix(".html");
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(resolver);
//构造上下文(Model)
Context context = new Context();
context.setVariable("paperTitle",paperTitle);
context.setVariable("partInfos", partInfos);
StringBuilder fileName = new StringBuilder();
FileWriter write = new FileWriter(fileName.toString());
大致的关键代码是这样的,一般情况下的运行是没问题的,但是遇到了,生成的html文件部分乱码问题,在网上查到的资料说是生成文件的时候需要设置解析器编码问题,于是加了一行代码
resolver.setCharacterEncoding("UTF-8");
但是在浏览器打开发现本来是部分乱码的文件变成了全部乱码了,但是直接用编辑器打开html文件发现是没有乱码的,于是怀疑文件的编码问题,后面查看到生成的html文件是ASCII编码的,后来查到
FileWriter默认Java FileWriter 默认是用(ISO-8859-1 or US-ASCII)西方编码的
并且无法更改编码
所以就更换了一个文件输出流,设置输出流编码为UTF-8即可,至此才发现FileWriter用起来有这么大的坑