我一直在尝试使用包含以下内容的速度模板:
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());
我如何解决这个问题?
答案 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);