我在网站编码方面遇到了大问题! 我使用的是Spring 3、Tomcat 6和MySQL数据库。我想在我的网站上支持德语和捷克语,同时还有英语。我将所有的JSP文件创建为UTF-8格式,并在每个JSP中包含以下内容:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
我创建了 messages.properties(默认为捷克语)、messages_de.properties 和 messages_en.properties 文件,并且它们都保存为 UTF-8 格式。
我在 web.xml 中添加了以下内容:
<filter>
<filter-name>encodingFilter</filter-name>
<filterclass>
org.springframework.web.filter.CharacterEncodingFilter</filterclass>
<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>
<locale-encoding-mapping-list>
<locale-encoding-mapping>
<locale>en</locale>
<encoding>UTF-8</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>cz</locale>
<encoding>UTF-8</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>de</locale>
<encoding>UTF-8</encoding>
</locale-encoding-mapping>
</locale-encoding-mapping-list>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然后将以下内容添加到我的applicationContext.xml文件中:
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource"
p:basenames="messages"/>
<!-- Declare the Interceptor -->
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"
p:paramName="locale" />
</mvc:interceptors>
<!-- Declare the Resolver -->
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
我在 %CATALINA_HOME%/conf 的 server.xml 文件的 Connector 元素中将 useBodyEncodingForURI 属性设置为 true,另外也尝试过使用 URIEncoding="UTF-8"。
我创建了所有的表和字段都使用了字符集 utf8 和校对规则 utf8_general_ci。
我的浏览器编码是 UTF-8(顺便说一句,我使用的是 IE8 和 Firefox 3.6.3)。
当我在 MYSQL Query 浏览器中手动插入捷克语或德语数据时,它被正确地插入,并且在我的应用程序中也正确地显示出来。
所以,以下是我遇到的问题列表:
默认情况下,应该加载 messages.properties(捷克语),但实际上默认加载的是 messages_en.properties。
在 web 表单中,当我输入捷克语数据并单击提交按钮时,在 Controller 中将数据打印到控制台之前,不正确的字符会被打印出来,这正是保存到数据库中的确切数据。
我不知道哪里出错了!为什么我做了别人做过并且成功的事情,但是我却无法让它工作!我不知道。。。
请帮帮我,我被这个烂问题困扰了几天,让我疯狂!
非常感谢您的帮助。