Spring - Thymeleaf - Tomcat -> 无法正确处理 UTF-8 字符
Spring - Thymeleaf - Tomcat -> can not process UTF-8 character correctly
我正在尝试在 Spring-MVC 网页中显示 UTF-8 字符。
utf-8 值来自数据库。我已经将我的数据库转换成utf-8。
我编写的网络服务按预期显示值,但在网页中显示的值不正确。
下面是我的spring配置,请告诉我我做错了什么。
我正在使用 thymeleaf 作为模板引擎:
Thymeleafe 配置:
<bean id="templateResolver"
class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".html"/>
<property name="characterEncoding" value="UTF-8"/>
<property name="templateMode" value="HTML5"/>
</bean>
<bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver"/>
</bean>
<bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine"/>
</bean>
我还在 web.xml 中添加了 CharecterEncodingFilter,如下所示:
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
我也试过更改 tomcat 配置中的 server.xml:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443"
URIEncoding="UTF-8" useBodyEncodingForURI="true"/>
但它没有按预期工作:
它在给我看????代替实际值。奇怪的是,当我使用实际值的 Unicode 值时,它就起作用了。
任何人都可以让我知道我做错了什么或遗漏了什么。
使用 XML
更新 Ans 配置
<bean id="templateResolver"
class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".html"/>
<property name="templateMode" value="HTML5"/>
</bean>
<bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver"/>
</bean>
<bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
<property name="characterEncoding" value="UTF-8" />
<property name="templateEngine" ref="templateEngine"/>
</bean>
我必须在 ThymeleafViewResolver
中设置 characterEncoding 而不是 ServletContextTemplateResolver
您应该尝试将 utf 添加到 thymeleaf 视图解析器:
Bean
public ThymeleafViewResolver viewResolver() {
ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
thymeleafViewResolver.setTemplateEngine(templateEngine());
thymeleafViewResolver.setCharacterEncoding("UTF-8");
return thymeleafViewResolver;
}
我正在尝试在 Spring-MVC 网页中显示 UTF-8 字符。
utf-8 值来自数据库。我已经将我的数据库转换成utf-8。
我编写的网络服务按预期显示值,但在网页中显示的值不正确。
下面是我的spring配置,请告诉我我做错了什么。
我正在使用 thymeleaf 作为模板引擎:
Thymeleafe 配置:
<bean id="templateResolver"
class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".html"/>
<property name="characterEncoding" value="UTF-8"/>
<property name="templateMode" value="HTML5"/>
</bean>
<bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver"/>
</bean>
<bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine"/>
</bean>
我还在 web.xml 中添加了 CharecterEncodingFilter,如下所示:
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
我也试过更改 tomcat 配置中的 server.xml:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443"
URIEncoding="UTF-8" useBodyEncodingForURI="true"/>
但它没有按预期工作: 它在给我看????代替实际值。奇怪的是,当我使用实际值的 Unicode 值时,它就起作用了。
任何人都可以让我知道我做错了什么或遗漏了什么。
使用 XML
更新 Ans 配置<bean id="templateResolver"
class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".html"/>
<property name="templateMode" value="HTML5"/>
</bean>
<bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver"/>
</bean>
<bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
<property name="characterEncoding" value="UTF-8" />
<property name="templateEngine" ref="templateEngine"/>
</bean>
我必须在 ThymeleafViewResolver
中设置 characterEncoding 而不是 ServletContextTemplateResolver
您应该尝试将 utf 添加到 thymeleaf 视图解析器:
Bean
public ThymeleafViewResolver viewResolver() {
ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
thymeleafViewResolver.setTemplateEngine(templateEngine());
thymeleafViewResolver.setCharacterEncoding("UTF-8");
return thymeleafViewResolver;
}