java - Las plantillas de Velocity parecen fallar con UTF-8
(3)
He estado tratando de usar una plantilla de velocidad con el siguiente contenido:
Sübjäct $item
Todo funciona bien, excepto la traducción de los dos personajes de Unicode. La cadena de resultados impresa en la línea de comando se ve así:
Sübjäct foo
Busqué el problema en el sitio web de Speed y en la web, y encontré diferentes opciones de codificación de fuentes, que agregué a mi código. Pero estos no ayudan. Este es el código real:
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());
¿Cómo puedo solucionar este problema?
¿Has intentado usar esta sintaxis?
Template template = Velocity.getTemplate("subject.vm", "UTF-8");
Eso parece que debería hacer lo correcto.
Mi solución: añada " -Dfile.encoding = UTF-8 " a la opción jvm (no se incluyen las citas).
Intento con la solución posible anterior, ninguno de los cuales funciona para mí.
Después de días de búsqueda y exploración retorcidas, supongo que mi problema se produce en el procesamiento de velocidad del archivo html, porque descubrí que un texto que se muestra incorrectamente está en la codificación GB2312, me di cuenta de que la codificación del archivo vm no es correcta cuando la página ha sido renderizado (supongo).
Si está utilizando VelocityEngine junto con la clase JavaMailSenderImpl , no olvide configurar la propiedad defaultEncoding. Además, como se mencionó anteriormente, intente configurar las propiedades de input.encoding y output.encoding para la clase VelocityEngine . Os dejo un ejemplo a continuación.
Archivo de configuración
<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>