struts、hibernate、mysql - 字符编码问题

发布于 2024-09-26 18:13:21 字数 1167 浏览 1 评论 0原文

我有一个网络应用程序,它从用户那里收集一些数据并将它们保存到 mysql 数据库中。问题是,对于像“Ajánlat kiküldése”这样的字符串,存储到数据库中的是“Ajánlat kiküldése”。

对于我的数据库,我有默认字符集 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ánlat kikü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ánlat kiküldése 而不是 Ajánlat kiküldése )

I have a web app that gathers some data from the user and saves them to a mysql database. The problem is that for a String like "Ajánlat kiküldése", what gets stored to the database is "Ajánlat kiküldése".

For my database, i have DEFAULT CHARACTER SET utf8. For my tables i have DEFAULT CHARSET=utf8.

In my hibernate.cfg.xml i have:

<property name="hibernate.connection.useUnicode">true</property>
<property name="hibernate.connection.characterEncoding">UTF-8</property>
<property name="hibernate.connection.charSet">UTF-8</property>

If I enter "Ajánlat kiküldése" directly into the database using a mysql client, the text gets stored correctly. SO somewhere along the way inside my application the text gets changed.

I have this in my jspx page:

<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>

For my form I use sutrts html taglib and the code is very simple:

<html:form action="/submitAddProject">
            <table>
                <tr>
                    <td>name</td>
                    <td>
                        <html:text property="projectNameToAdd"/> 
                    <td>
                 etc.

On submit, when I do myForm.getProjectNameToAdd, I have a different text than the one I enter in the form. (Ajánlat kiküldése instead of Ajánlat kiküldése )

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

羁客 2024-10-03 18:13:21

我也有类似的问题,但我的问题是直接使用hibernate将数据保存在MySQL中。通过将 useUnicode=true&characterEncoding=UTF-8 附加到配置文件中的连接字符串,可以轻松解决该问题。

例如: jdbc.databaseurl=jdbc:mysql://localhost:3306/myHibernateDB?useUnicode=true&characterEncoding=UTF-8

对我来说就像魔术一样。

这是讨论它的文章: http ://www.isocra.com/2007/01/utf-8-with-hibernate-30-and-mysql/

I had a similar problem, but my problem was directly with hibernate saving the data in MySQL. The problem can be easily fixed by appending useUnicode=true&characterEncoding=UTF-8 to your connection string in configuration file.

For example: jdbc.databaseurl=jdbc:mysql://localhost:3306/myHibernateDB?useUnicode=true&characterEncoding=UTF-8

Worked for me like a piece of magic.

This is the article that talks about it: http://www.isocra.com/2007/01/utf-8-with-hibernate-30-and-mysql/

南渊 2024-10-03 18:13:21

您可以尝试创建以下过滤器:

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

You can try to create the following filter:

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(){}
}

UPDATE:
You need to create Utf8EncodingFilter class, import Filter interface, exception, etc. (any modern IDE will do this for you). Then you need to add this filter into your deployment descriptor (can be found at WEB-INF/web.xml) using the following syntax:

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

You can read more about filters here: http://www.ibm.com/developerworks/java/library/j-pj2ee10.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文