struts,hibernate,mysql - char编码问题

时间:2010-10-09 07:52:21

标签: java mysql hibernate character-encoding struts

我有一个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)

2 个答案:

答案 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