Ответ 1
Вы пытались использовать:
Template template = Velocity.getTemplate("subject.vm", "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());
Как я могу исправить эту проблему?
Вы пытались использовать:
Template template = Velocity.getTemplate("subject.vm", "UTF-8");
? Похоже, он должен поступать правильно.
Если вы используете 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>
Мое решение: добавьте параметр -Dfile.encoding = UTF-8 "в jvm (кавычки не включены).
Я пытаюсь выполнить вышеупомянутое решение, ни одно из них не работает для меня.
После нескольких дней извращенного поиска и изучения я предполагаю, что моя проблема возникает при ускорении рендеринга html файла, потому что я обнаружил, что некорректно отображаемый текст на самом деле находится в кодировке GB2312, я понял, что кодировка vm файла неверна, когда страница отображается (я думаю).