Подтвердить что ты не робот

Шаблоны скорости, похоже, терпят неудачу с UTF-8

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

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

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

4b9b3361

Ответ 1

Вы пытались использовать:

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

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

Ответ 2

Если вы используете 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>

Ответ 3

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

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

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