Velocity模板似乎因UTF-8而失败

时间:2011-03-01 07:22:24

标签: java utf-8 velocity

我一直在尝试使用包含以下内容的速度模板:

Sübjäct $item

除了两个Unicode字符的翻译外,一切正常。打印在命令行上的结果字符串如下所示:

Sübjäct foo

我搜索了速度网站和网页上的这个问题,并提出了不同的字体编码选项,我将其添加到我的代码中。但这些没有帮助。这是实际的代码:

velocity.setProperty("file.resource.loader.path", absPath);
velocity.setProperty("input.encoding", "UTF-8");
velocity.setProperty("output.encoding", "UTF-8");

Template t = velocity.getTemplate("subject.vm");
t.setEncoding("UTF-8");

StringWriter sw = new StringWriter();

t.merge(null, sw);       
System.out.println(sw.getBuffer());

我如何解决这个问题?

4 个答案:

答案 0 :(得分:36)

您是否尝试过使用此语法?

Template template = Velocity.getTemplate("subject.vm", "UTF-8");

看起来应该做正确的事。

答案 1 :(得分:1)

如果您正在使用VelocityEngine和 JavaMailSenderImpl 类,请不要忘记设置defaultEncoding属性。另外,如上所述,尝试为 VelocityEngine 类配置input.encoding和output.encoding属性。我在下面留下一个例子。

  

配置文件

import Foundation
func log(Int number) -> Int
{
    return floor(log10(number))
}

答案 2 :(得分:0)

我的解决方案:添加" -Dfile.encoding = UTF-8 "到jvm选项(不包括引号)。

我尝试了上述可能的解决方案,但没有一个适合我。

经过数天的扭曲搜索和探索,我猜我的问题发生在velocitie上呈现html文件,因为我发现一些错误显示的文本实际上是GB2312编码,我意识到vm文件的编码是页面渲染时不正确(我猜)。

答案 3 :(得分:0)

如果您是手动创建JavaMailSenderImpl实例,则可以通过以下方式设置encoding属性:

JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
Properties mailProperties = new Properties();
mailProperties.put("defaultEncoding", "UTF-8");
mailSender.setJavaMailProperties(mailProperties);

如果您使用的是MimeMessageHelper,请按如下所示设置编码:

MimeMessageHelper helper = new MimeMessageHelper(mailSender.createMimeMessage(), true, "UTF-8");

最后,对于Velocity Engine,在设置编码时有两种获取/应用模板的方法:

Template template = Velocity.getTemplate("template", "UTF-8");
// or
velocityEngine.mergeTemplate("template", "UTF-8", velocityContext, stringWriter);