Java struts、hibernate、mysql-字符编码问题
我有一个web应用程序,可以从用户那里收集一些数据,并将它们保存到mysql数据库中。问题是,对于像“Ajánlat kiküldése”这样的字符串,存储到数据库中的是“AjÃnlat kiküldÃse” 对于我的数据库,我有默认字符集utf8。对于我的表,我有默认的字符集=utf8 在我的hibernate.cfg.xml中,我有: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> &
<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应用程序都必须使用过滤器来完成这项工作?很抱歉,无法插入语法,所以只需更新我的答案。谢谢你,伙计,你是个救命恩人!