Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java struts、hibernate、mysql-字符编码问题_Java_Mysql_Hibernate_Character Encoding_Struts - Fatal编程技术网

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

Java struts、hibernate、mysql-字符编码问题,java,mysql,hibernate,character-encoding,struts,Java,Mysql,Hibernate,Character Encoding,Struts,我有一个web应用程序,可以从用户那里收集一些数据,并将它们保存到mysql数据库中。问题是,对于像“Ajánlat kiküldése”这样的字符串,存储到数据库中的是“AjÃnlat kiküldÃse” 对于我的数据库,我有默认字符集utf8。对于我的表,我有默认的字符集=utf8 在我的hibernate.cfg.xml中,我有: <property name="hibernate.connection.useUnicode">true</property> &

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

对于我的数据库,我有默认字符集utf8。对于我的表,我有默认的字符集=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>
true
UTF-8
UTF-8
如果我使用mysql客户端直接在数据库中输入“Ajánlat kiküldése”,则文本将正确存储。因此,在我的应用程序中的某个地方,文本发生了变化

我的jspx页面中有以下内容:

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

对于我的表单,我使用SURTS html标记库,代码非常简单:

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

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

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类、导入过滤器接口、异常等(任何现代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>

UTF-8编码滤波器
com.example.utf8编码过滤器
UTF-8编码滤波器
/*

您可以在这里阅读有关过滤器的更多信息:

我也遇到过类似的问题,但我的问题是hibernate直接将数据保存在MySQL中。通过在配置文件中的连接字符串中附加useUnicode=true&characterEncoding=UTF-8,可以很容易地解决此问题

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

对我来说就像一个魔术


这是一篇关于它的文章:

还有一件事:当我在数据库中手动输入文本时,它会在我的应用程序中正确显示。只有在保存文本时才会出现问题。在我保存到db之前,当我调用字符串字段上的getter出现问题时,我已经得到了错误编码的文本。因此,问题似乎不是当我尝试保存到db时,而是当我的表单对象的字段从html页面填充时,更准确地说,stter接收的字符串已经扭曲,并且与文本字段中输入的字符串不同。您是否使用连接池framewrok?Sry但是我应该如何使用此类?放在哪里?:)在struts中,我认为有一个名为controller的servlet,它为我的表单对象调用reset和setter。调用setter时,它已经收到错误的字符编码。所以,表单有好数据,setter接收坏数据。在过程中的某个地方,有人扭曲了数据。您需要创建Utf8EncodingFilter类、导入筛选器接口、异常等(任何现代IDE都可以为您完成这项工作)。然后,您需要使用以下语法将此筛选器添加到部署描述符(可在WEB-INF/WEB.xml中找到):否,缺少语法:)请重试。堆栈溢出编辑有点奇怪:)所以每个想要使用奇怪字符的web应用程序都必须使用过滤器来完成这项工作?很抱歉,无法插入语法,所以只需更新我的答案。谢谢你,伙计,你是个救命恩人!