2014-06-19 59 views
0

首次在JAVA项目中使用FreeMarker并在堆栈上配置中文字符。FreeMarker无法显示汉字

我尝试了很多例子来修复下面的代码,但它仍然无法做到。

// Free-marker configuration object    
Configuration conf = new Configuration();    
conf.setTemplateLoader(new ClassTemplateLoader(getClass(), "/")); 
conf.setLocale(Locale.CHINA); 
conf.setDefaultEncoding("UTF-8"); 

// Load template from source folder    
Template template = conf.getTemplate(templatePath);         
template.setEncoding("UTF-8"); 

// Get Free-Marker output value    
Writer output = new StringWriter();    
template.process(input, output); 

// Map Email Full Content    
EmailNotification email = new EmailNotification(); 
email.setSubject(subject);    
....... 

看到了一些示例请求,以对freemarker.properties进行更改,但我没有此文件。我只是导入.jar文件并使用它。

请告诉我该怎么做才能让它显示汉字。

+0

是什么让你觉得它没有正确显示中文字符? – Raedwald

+2

您的模板文件是否正确地使用了UTF-8编码? –

+0

[Freemarker编码 - 重音字符处的问号]的可能重复(http://stackoverflow.com/questions/9559658/freemarker-encoding-question-marks-in-the-place-of-accented-characters) – Raedwald

回答

0

究竟是什么问题?

无论如何,cfg.setDefaultEncoding("UTF-8");应该是足够的,假设您的模板文件确实是UTF-8。但是,另一个必须确保正确编码的地方是当您将模板输出从UNICODE文本转换回“binary”时。所以FreeMarker将它的输出发送到Writer,所以到目前为止所有的东西都是UNICODE,但是你会得到OutputStreamWriter或类似的东西,并且必须使用可以编码中文字符的字符集(UTF-8)。

+2

Windows上的作家不会默认使用UTF-8,所以这确实会导致问题。 –

+0

@ddekany请再次看到我的主要帖子,我更新了源代码。 – Chang

0

您需要更改您的.ftl模板文件的文件编码,方法是将它们保存在IDE或记事本中,然后在保存对话框中更改编码。 保存对话框底部应该有一个编码下拉菜单。