我是linux系统,表的编码方式是utf8;jsp的输入框编码方式也是utf8;
hibernate.cfg.xml中间有一句
hibernate.cfg.xml配置文件
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
应该也是utf8;
断点跟踪可以确认在hibernate之前肯定是正确的中文字符,也就是说问题大部分可能还是出在后面。
然后再命令行中直接插入汉字,没问题。。。问题在哪儿呢?
8 个解决方案
#1
看看接受到的表单数据在服务器端是不是utf-8编码,不是的话配个过滤器过滤下就ok了
#2
是啊,servlet接收到数据之后第一句话就设置了编码方式
#3
总结的几个乱码问题 希望我们全体学员也能够学会总结
java web 很是希望大家能够学好.并且也希望大家能够在学习过程中不段的积累相关的知识点
1、在response中写<meta http-equiv="content-style-type" content="text/html;charset=GB2312">
2、使用new String(字符变量.getBytes("iso-8859-1"),"gb2312")
3、在jsp中处理乱码问题如下解决
String 变量名 = "你好";
lPara = java.net.URLEncoder.encode(new String(变量名.getBytes("GBK"),"iso8859-1"));
<a href="yourServlet?Para=<%=lPara%>">Test</a>
...
yourServlet:
String lPara=request.getParameter("Para");
4、在得到变量的值之前(request.getParameter("界面上的控件名字")),加上如下代码
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("gb2312");
respose.setCharacterEncoding("gb2312");
5、确保在servlet中中文处理代码(方法4中的3行代码)在PrintWriter对象之前
PrintWriter out = response.getWriter();
6、如果1~5的操作都操作了还是乱码问题则:
注意在页面上单吉右键 --编码--给成中文(就OK)
7、要是如上1~6操作还是不能够解决中文问题则:
换个服务器操作即便(换个tom猫在发布或者使用jboss发布)
8、仅仅提供参考
Servlet 中文乱码解决【使用过滤器】
my.EncodingFilter.java://创建类的名字
import java.io.IOException;//在该类中具体实现如下代码(拷贝过去)
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;
public class EncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
// Select and set (if needed) the character encoding to be used
String encoding = selectEncoding(request);
if (encoding != null) {
request.setCharacterEncoding(encoding);
}
// Pass control on to the next filter
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
再在web.xml的<web-apps>中加入如下内容 //在web.xml中实现如下代码
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>my.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value></init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如上操作就可以解决乱码问题
注意:my.EncodingFilter是EncodingFilter这个类在我的工程中的位置
最后一个只建议不求操作
并且在学习的过程中要积累相关的错误。譬如:
404错误--请求资源找不到
400错误--可能是请求的方式问题
405错误--get/post和服务器端不匹配
500错误--程序有问题
注意积累...
java web 很是希望大家能够学好.并且也希望大家能够在学习过程中不段的积累相关的知识点
1、在response中写<meta http-equiv="content-style-type" content="text/html;charset=GB2312">
2、使用new String(字符变量.getBytes("iso-8859-1"),"gb2312")
3、在jsp中处理乱码问题如下解决
String 变量名 = "你好";
lPara = java.net.URLEncoder.encode(new String(变量名.getBytes("GBK"),"iso8859-1"));
<a href="yourServlet?Para=<%=lPara%>">Test</a>
...
yourServlet:
String lPara=request.getParameter("Para");
4、在得到变量的值之前(request.getParameter("界面上的控件名字")),加上如下代码
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("gb2312");
respose.setCharacterEncoding("gb2312");
5、确保在servlet中中文处理代码(方法4中的3行代码)在PrintWriter对象之前
PrintWriter out = response.getWriter();
6、如果1~5的操作都操作了还是乱码问题则:
注意在页面上单吉右键 --编码--给成中文(就OK)
7、要是如上1~6操作还是不能够解决中文问题则:
换个服务器操作即便(换个tom猫在发布或者使用jboss发布)
8、仅仅提供参考
Servlet 中文乱码解决【使用过滤器】
my.EncodingFilter.java://创建类的名字
import java.io.IOException;//在该类中具体实现如下代码(拷贝过去)
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;
public class EncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
// Select and set (if needed) the character encoding to be used
String encoding = selectEncoding(request);
if (encoding != null) {
request.setCharacterEncoding(encoding);
}
// Pass control on to the next filter
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
再在web.xml的<web-apps>中加入如下内容 //在web.xml中实现如下代码
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>my.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value></init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如上操作就可以解决乱码问题
注意:my.EncodingFilter是EncodingFilter这个类在我的工程中的位置
最后一个只建议不求操作
并且在学习的过程中要积累相关的错误。譬如:
404错误--请求资源找不到
400错误--可能是请求的方式问题
405错误--get/post和服务器端不匹配
500错误--程序有问题
注意积累...
#4
如果提交到服务器端的时候还不是乱码,那就是mysql连接串的问题了。
比如我用gbk的,连接串是:
jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=gbk
那utf-8的应该就是
jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf8
&就是&符号,是我在xml文件里配置实用的,如果你不用xml配置,那直接写成&
比如我用gbk的,连接串是:
jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=gbk
那utf-8的应该就是
jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf8
&就是&符号,是我在xml文件里配置实用的,如果你不用xml配置,那直接写成&
#5
正解 应该这么做 看了好多楼层
#6
有效!!!!
#7
很管用!!!!
#8
良心答案!
#1
看看接受到的表单数据在服务器端是不是utf-8编码,不是的话配个过滤器过滤下就ok了
#2
是啊,servlet接收到数据之后第一句话就设置了编码方式
#3
总结的几个乱码问题 希望我们全体学员也能够学会总结
java web 很是希望大家能够学好.并且也希望大家能够在学习过程中不段的积累相关的知识点
1、在response中写<meta http-equiv="content-style-type" content="text/html;charset=GB2312">
2、使用new String(字符变量.getBytes("iso-8859-1"),"gb2312")
3、在jsp中处理乱码问题如下解决
String 变量名 = "你好";
lPara = java.net.URLEncoder.encode(new String(变量名.getBytes("GBK"),"iso8859-1"));
<a href="yourServlet?Para=<%=lPara%>">Test</a>
...
yourServlet:
String lPara=request.getParameter("Para");
4、在得到变量的值之前(request.getParameter("界面上的控件名字")),加上如下代码
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("gb2312");
respose.setCharacterEncoding("gb2312");
5、确保在servlet中中文处理代码(方法4中的3行代码)在PrintWriter对象之前
PrintWriter out = response.getWriter();
6、如果1~5的操作都操作了还是乱码问题则:
注意在页面上单吉右键 --编码--给成中文(就OK)
7、要是如上1~6操作还是不能够解决中文问题则:
换个服务器操作即便(换个tom猫在发布或者使用jboss发布)
8、仅仅提供参考
Servlet 中文乱码解决【使用过滤器】
my.EncodingFilter.java://创建类的名字
import java.io.IOException;//在该类中具体实现如下代码(拷贝过去)
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;
public class EncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
// Select and set (if needed) the character encoding to be used
String encoding = selectEncoding(request);
if (encoding != null) {
request.setCharacterEncoding(encoding);
}
// Pass control on to the next filter
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
再在web.xml的<web-apps>中加入如下内容 //在web.xml中实现如下代码
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>my.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value></init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如上操作就可以解决乱码问题
注意:my.EncodingFilter是EncodingFilter这个类在我的工程中的位置
最后一个只建议不求操作
并且在学习的过程中要积累相关的错误。譬如:
404错误--请求资源找不到
400错误--可能是请求的方式问题
405错误--get/post和服务器端不匹配
500错误--程序有问题
注意积累...
java web 很是希望大家能够学好.并且也希望大家能够在学习过程中不段的积累相关的知识点
1、在response中写<meta http-equiv="content-style-type" content="text/html;charset=GB2312">
2、使用new String(字符变量.getBytes("iso-8859-1"),"gb2312")
3、在jsp中处理乱码问题如下解决
String 变量名 = "你好";
lPara = java.net.URLEncoder.encode(new String(变量名.getBytes("GBK"),"iso8859-1"));
<a href="yourServlet?Para=<%=lPara%>">Test</a>
...
yourServlet:
String lPara=request.getParameter("Para");
4、在得到变量的值之前(request.getParameter("界面上的控件名字")),加上如下代码
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("gb2312");
respose.setCharacterEncoding("gb2312");
5、确保在servlet中中文处理代码(方法4中的3行代码)在PrintWriter对象之前
PrintWriter out = response.getWriter();
6、如果1~5的操作都操作了还是乱码问题则:
注意在页面上单吉右键 --编码--给成中文(就OK)
7、要是如上1~6操作还是不能够解决中文问题则:
换个服务器操作即便(换个tom猫在发布或者使用jboss发布)
8、仅仅提供参考
Servlet 中文乱码解决【使用过滤器】
my.EncodingFilter.java://创建类的名字
import java.io.IOException;//在该类中具体实现如下代码(拷贝过去)
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;
public class EncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
// Select and set (if needed) the character encoding to be used
String encoding = selectEncoding(request);
if (encoding != null) {
request.setCharacterEncoding(encoding);
}
// Pass control on to the next filter
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
再在web.xml的<web-apps>中加入如下内容 //在web.xml中实现如下代码
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>my.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value></init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如上操作就可以解决乱码问题
注意:my.EncodingFilter是EncodingFilter这个类在我的工程中的位置
最后一个只建议不求操作
并且在学习的过程中要积累相关的错误。譬如:
404错误--请求资源找不到
400错误--可能是请求的方式问题
405错误--get/post和服务器端不匹配
500错误--程序有问题
注意积累...
#4
如果提交到服务器端的时候还不是乱码,那就是mysql连接串的问题了。
比如我用gbk的,连接串是:
jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=gbk
那utf-8的应该就是
jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf8
&就是&符号,是我在xml文件里配置实用的,如果你不用xml配置,那直接写成&
比如我用gbk的,连接串是:
jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=gbk
那utf-8的应该就是
jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf8
&就是&符号,是我在xml文件里配置实用的,如果你不用xml配置,那直接写成&
#5
正解 应该这么做 看了好多楼层
#6
有效!!!!
#7
很管用!!!!
#8
良心答案!