我有一个Web应用程序,它从用户收集一些数据并将它们保存到mysql数据库。问题是对于像“Ajánlatkiküldése”这样的字符串,存储到数据库的是“AjánlatkiküldÃsese”。
对于我的数据库,我有DEFAULT CHARACTER SET utf8。对于我的桌子,我有DEFAULT CHARSET = utf8。
在我的hibernate.cfg.xml中,我有:
<property name="hibernate.connection.useUnicode">true</property>
<property name="hibernate.connection.characterEncoding">UTF-8</property>
<property name="hibernate.connection.charSet">UTF-8</property>
如果我使用mysql客户端直接将“Ajánlatkiküldése”输入数据库,文本将被正确存储。因此,在我的应用程序内部的某处,文本会发生变化。
我在jspx页面中有这个:
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
对于我的表单,我使用sutrts html taglib,代码非常简单:
<html:form action="/submitAddProject">
<table>
<tr>
<td>name</td>
<td>
<html:text property="projectNameToAdd"/>
<td>
etc.
在提交时,当我执行myForm.getProjectNameToAdd时,我的文本与我在表单中输入的文本不同。 (Ajánlatkiküldése而不是Ajánlatkiküldése)
答案 0 :(得分:2)
我有类似的问题,但我的问题是直接用hibernate保存MySQL中的数据。通过将useUnicode = true&amp; characterEncoding = UTF-8附加到配置文件中的连接字符串,可以轻松解决该问题。
例如:jdbc.databaseurl = jdbc:mysql:// localhost:3306 / myHibernateDB?useUnicode = true&amp; characterEncoding = UTF-8
像一块魔法一样为我工作。
这是关于它的文章:http://www.isocra.com/2007/01/utf-8-with-hibernate-30-and-mysql/
答案 1 :(得分:1)
您可以尝试创建以下过滤器:
public class Utf8EncodingFilter implements Filter {
public void init(FilterConfig config) throws ServletException {}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain next)
throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
next.doFilter(request, response);
}
public void destroy(){}
}
更新: 您需要创建Utf8EncodingFilter类,导入Filter接口,异常等(任何现代IDE都会为您执行此操作)。然后,您需要使用以下语法将此过滤器添加到部署描述符(可在WEB-INF / web.xml中找到):
<filter>
<filter-name>UTF-8 Encoding Filter</filter-name>
<filter-class>com.example.Utf8EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UTF-8 Encoding Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
您可以在此处详细了解过滤器:http://www.ibm.com/developerworks/java/library/j-pj2ee10.html