【问题标题】:FreeMarker Not Able Display Chinese CharacterFreeMarker 无法显示汉字
【发布时间】:2014-08-09 23:13:38
【问题描述】:

第一次在 JAVA 项目上使用 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 文件并使用它。

请告知我应该怎么做才能使其显示汉字。

【问题讨论】:

  • 是什么让你觉得它不能正确显示汉字?
  • 您的模板文件是否正确 UTF-8 编码?
  • @RobbyCornelissen 嗨,我可以知道如何确保我的模板被编码吗?我在模板中尝试了 ,但没有帮助。
  • @Raedwald,嗨,我尝试设置默认编码,如上所示。但没有帮助。

标签: java freemarker


【解决方案1】:

究竟是什么问题?

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

【讨论】:

  • Windows 上的编写器不默认为 UTF-8,因此这确实会导致问题。
  • @ddekany 请再次查看我的主帖,我更新了源代码。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-12-09
    • 1970-01-01
    • 2011-04-23
    • 2018-10-21
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多