速度模板似乎在 UTF-8 中失败

2022-09-01 18:35:06

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

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());

如何解决此问题?


答案 1

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

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

这看起来应该做正确的事情。


答案 2

如果您将 VelocityEngine 与 JavaMailSenderImpl 类一起使用,请不要忘记设置默认的编码属性。此外,如上所述,请尝试为 VelocityEngine 类配置 input.encoding 和 output.encoding 属性。我在下面留下一个例子。

配置文件

<bean id="smtpSession" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="java:jboss/example/jndiName"/>
    </bean>
<bean id="javaMailSenderImpl" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="session" ref="smtpSession"/>
        <property name="defaultEncoding" value="UTF-8"/>
</bean>

<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
        <property name="velocityProperties">
            <props>
                <prop key="input.encoding">UTF-8</prop>
                <prop key="output.encoding">UTF-8</prop>
                <prop key="response.encoding">UTF-8</prop>
                <prop key="resource.loader">file</prop>
                <prop key="file.resource.loader.class">org.apache.velocity.runtime.resource.loader.FileResourceLoader
                </prop>
                <prop key="file.resource.loader.path">${relative.path}/email-templates</prop>
                <prop key="file.resource.loader.cache">false</prop>                    
            </props>
        </property>
    </bean>

推荐