解决乱码总的思想就是编码一致
我的解决方案是:在网上弄了一个Filter
连接数据库是时 设置characteEncoding=gbk
然后在执行sql语句时,通常也要转换一下
sql = new String(sql.getBytes("gbk"),"ISO-8859-1");
在页面显示时,也要对要显示的数据转换一下 str = new String(sql.getBytes("ISO-8859-1"),"gbk");在这里,我想问一下,那个Filter的作用不就是用来处理中文乱码的吗?为什么还需要后面的步骤啊?
页面的编码是gbk的,连接数据库时要characteEncoding=gbk,这个还能理解,为什么在执行sql语句和读取数据的时候又要转换啊?而且还是在gbk和ISO-8859-1之间转换,不大明白,
我的解决方案是:在网上弄了一个Filter
连接数据库是时 设置characteEncoding=gbk
然后在执行sql语句时,通常也要转换一下
sql = new String(sql.getBytes("gbk"),"ISO-8859-1");
在页面显示时,也要对要显示的数据转换一下 str = new String(sql.getBytes("ISO-8859-1"),"gbk");在这里,我想问一下,那个Filter的作用不就是用来处理中文乱码的吗?为什么还需要后面的步骤啊?
页面的编码是gbk的,连接数据库时要characteEncoding=gbk,这个还能理解,为什么在执行sql语句和读取数据的时候又要转换啊?而且还是在gbk和ISO-8859-1之间转换,不大明白,
解决方案 »
- 想学hibernate一些高级的特性,求指点
- 用EXT的editorgridpanel,如何让某一行的某一列为不可编辑呢?
- 救急!!!hibernate关联查询问题,在线等!!!!!!!!!!!
- 严重: Servlet.service() for servlet jsp threw exception
- 如何解决用户对一篇文章投票后不能再投的问题
- 请教关于电子商务网站的针对性检索分类问题
- 急求打印问题(在线等!!!)
- 我现在发现一个错误Before start of result set,我没有在记录集之前操作啊
- split的使用,立即给分
- 如何在tomcat启动的时候装载数据
- jsp中向url提交post请求
- 学习java 迷茫中
表单中传递的参数是在HTTP中的BODY中传送的.而设置字符过滤器只能起到过滤HTTP中BODY中的参数.而TOMCAT默认是ISO8859-1的编码方式,所以你在URL中传递过去后就是乱码了.而且过滤器也不管用了.
所以为了防止字符集不同产生的乱码问题,中文在作为参数传递的时候会因为字符集编码出现絮乱,数据在网络中是以ISO-8859-1码来传的。
为了防止程序在使用的过程中发生这种情况,所以要进行转码处理一下ISO-8859-1,国际统一认证转换方式
sql = new String(sql.getBytes("gbk"),"ISO-8859-1");
这个设置了之后就不是乱码了,但从数据库读取出来的时候还是乱码,所以又用了这个:str = new String(sql.getBytes("ISO-8859-1"),"gbk");
不知道是不是过滤器配置问题
还有你可以使用spring自带的filter进行转码,只需在web.xml里加入这段代码:
<filter>
<filter-name>Encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
或者自己写一个也行,代码大概如下:
package filter;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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*中文乱码处理filter*/
public class SetCharacterEncodingFilter implements Filter { private String encoding = "gbk"; public void destroy() {
} public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
request.setCharacterEncoding(encoding);
filterChain.doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException {
this.encoding = filterConfig.getInitParameter("encoding");
}}
在web.xml里加入下面这段代码:
<filter>
<filter-name>Encoding</filter-name>
<filter-class>filter.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>gbk</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我看视频教程上的过滤器也是你那么写的,我用的是另一个过滤器,生成sql语句往数据库插得时候总是提示空指针异常,然后我转了一下编码就没事了,不知道怎么回事···回头用用你这过滤器····
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>过滤器
package org.filter;
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;
public class FilterChar implements Filter{ public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
arg0.setCharacterEncoding("UTF-8");
arg2.doFilter(arg0, arg1);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}web.xml
<filter>
<filter-name>char</filter-name>
<filter-class>org.filter.FilterChar</filter-class>
</filter>
<filter-mapping>
<filter-name>char</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>