我在网站编码方面遇到了一个大问题!我使用spring 3,tomcat 6和mysql db。我想在我的网站中支持德语和捷克语以及英语,我将所有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(默认值为Czech),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元素中将useBodyEncodingForURI属性设置为true,也尝试添加URIEncoding =“ UTF-8”。
我用字符集[utf8]和集合[utf8_general_ci]创建了所有表和字段
我的浏览器中的编码为UTF-8(顺便说一句,我有IE8和Firefox 3.6.3)
当我打开MYSQL查询浏览器并手动插入捷克或德国数据时,它已正确插入,并且也正确显示在我的应用程序中。
因此,这是我遇到的问题:
默认情况下,messages.properties(捷克语)应加载,而messages_en.properties默认情况下加载。
在Web表单中,当我输入Czech数据时,然后单击Submit,在Controller中,我先在控制台中打印出数据,然后将其保存到db,所打印的内容不正确,包含奇怪的字符,这是正确的数据保存到数据库。
我不知道哪里出错了!尽管我做了人们所做的工作并为他们工作,但为什么我不能使它工作呢!不知道
请帮助我,自几天以来,我一直陷入这个糟糕的问题,这让我发疯!
先感谢您。
首先,如果您的项目正在使用Maven,请确保Maven资源插件已将UTF-8设置为其字符编码方案,否则消息属性文件可能会使用错误的编码写入目标。
其次,您正在使用 ResourceBundleMessageSource ,该 资源 使用仅支持ISO-8859-1编码的标准 java.util.ResourceBundle 和 java.util.Properties 。您可以改为使用 ReloadableResourceBundleMessageSource, 例如:
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basename" value="classpath:messages"/> <property name="defaultEncoding" value="UTF-8"/> </bean>
这是我从发现这个蛋糕解决方案博客文章。