Freemarker编码错误
Freemarker encoding wrong
我有项目是使用 freemarker 的码头服务器。我在我的模板中使用俄语字母并收到 ?
。我以前读过的所有科目都没有帮助我。
我在我的代码中使用
.setContentType("text/html;charset=utf-8");
.setCharacterEncoding("UTF-8");
我所有的文件都是 utf-8。
我的 Freemarker 页面生成器 servlet
public class PageGenerator {
private static PageGenerator pageGenerator;
private Configuration cfg;
public static PageGenerator instance() {
if (pageGenerator == null)
pageGenerator = new PageGenerator();
return pageGenerator;
}
public String getPage(String filename, Map<String, Object> data) {
Writer stream = new StringWriter();
try {
Template template = cfg.getTemplate(filename);
template.process(data, stream);
} catch (IOException | TemplateException e) {
e.printStackTrace();
}
return stream.toString();
}
private PageGenerator() {
cfg = setCfg();
}
private Configuration setCfg(){
cfg = new Configuration(Configuration.VERSION_2_3_20);
try {
cfg.setDirectoryForTemplateLoading(new File("templates/"));
cfg.setDefaultEncoding("UTF-8");
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
} catch (IOException e) {
e.printStackTrace();
}
return cfg;
}
}
但是在浏览器中我的页面使用 windows-1252 编码。
感谢您的想法ddekany
我使用了 debag 模式并发现 Class 扩展 HttpServletResponse 的响应有 "magic" 方法 .setCharacterEncoding()
在响应流中设置字符编码
我有项目是使用 freemarker 的码头服务器。我在我的模板中使用俄语字母并收到 ?
。我以前读过的所有科目都没有帮助我。
我在我的代码中使用
.setContentType("text/html;charset=utf-8");
.setCharacterEncoding("UTF-8");
我所有的文件都是 utf-8。
我的 Freemarker 页面生成器 servlet
public class PageGenerator {
private static PageGenerator pageGenerator;
private Configuration cfg;
public static PageGenerator instance() {
if (pageGenerator == null)
pageGenerator = new PageGenerator();
return pageGenerator;
}
public String getPage(String filename, Map<String, Object> data) {
Writer stream = new StringWriter();
try {
Template template = cfg.getTemplate(filename);
template.process(data, stream);
} catch (IOException | TemplateException e) {
e.printStackTrace();
}
return stream.toString();
}
private PageGenerator() {
cfg = setCfg();
}
private Configuration setCfg(){
cfg = new Configuration(Configuration.VERSION_2_3_20);
try {
cfg.setDirectoryForTemplateLoading(new File("templates/"));
cfg.setDefaultEncoding("UTF-8");
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
} catch (IOException e) {
e.printStackTrace();
}
return cfg;
}
}
但是在浏览器中我的页面使用 windows-1252 编码。
感谢您的想法ddekany
我使用了 debag 模式并发现 Class 扩展 HttpServletResponse 的响应有 "magic" 方法 .setCharacterEncoding()
在响应流中设置字符编码