Шаблоны скорости, кажется, терпят неудачу с UTF-8 - PullRequest
18 голосов
/ 01 марта 2011

Я пытался использовать шаблон скорости со следующим содержанием:

Sübjäct $item

Все отлично работает, кроме перевода двух символов Юникода.Строка результата, напечатанная в командной строке, выглядит следующим образом:

Sübjäct foo

Я проверил эту проблему на веб-сайте Speed ​​и в Интернете и предложил различные варианты кодирования шрифтов, которые я добавилв мой код.Но это не помогает.Это фактический код:

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

Как я могу решить эту проблему?

Ответы [ 3 ]

36 голосов
/ 01 марта 2011

Вы пытались использовать этот синтаксис?

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

Похоже, должен поступить правильно.

1 голос
/ 23 июля 2016

Если вы используете VelocityEngine вместе с JavaMailSenderImpl классом, не забудьте установить свойство defaultEncoding. Также, как упоминалось выше, попробуйте настроить свойства input.encoding и output.encoding для класса VelocityEngine . Я оставляю пример ниже.

Файл конфигурации

<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" ref="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>
0 голосов
/ 22 сентября 2016

Мое решение: добавьте " -Dfile.encoding = UTF-8 " к параметру jvm (кавычки не включены).

Я пробую вышеупомянутое возможное решение, ни одно из которых не работает длямне.

После нескольких дней искаженного поиска и исследования, я полагаю, что моя проблема возникает при рендеринге velocitie файла html, потому что я обнаружил, что некоторый неправильно отображаемый текст на самом деле находится в кодировке GB2312, я понял, что кодировка файла vm неисправить, когда страница отображается (я думаю).

...