jsp 为何设置了request 和response编码之后还是出现乱码

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
HttpServletRequest httpreq = (HttpServletRequest)request;
HttpServletResponse httpresp = (HttpServletResponse)response; chain.doFilter(httpreq, httpresp);
}

话说utf-8是支持中文的
utf-8 的中文编码是一个中文字3个字节
gbk 是2个字节
至于中文问题, 你的jsp页面是否有
<%@page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
头文件
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-04-12
要判断是get方式提交的还是post ,get方式和post方式处理中文乱码都不一样的,get先要打成iso8859-1然后再转换成utf8,post直接设置

===========================================================
public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletrequest;
HttpServletResponse response = (HttpServletResponse) servletresponse;
response.setContentType("text/html;charset=UTF-8");
if (request.getMethod().equalsIgnoreCase("POST")) {
request.setCharacterEncoding("UTF-8");
} else if (request.getMethod().equalsIgnoreCase("GET")) {
Map map = request.getParameterMap();
Iterator it = map.keySet().iterator();
String key = null;
String[] values = null;
while (it.hasNext()) {
key = it.next().toString();
values = (String[]) map.get(key);
for (int i = 0; i < values.length; i++) {
values[i] = new String(values[i].getBytes("ISO-8859-1"),"UTF-8");
}
}
}
chain.doFilter(servletrequest, servletresponse);
}追问

String[] values = null;
while (it.hasNext()) {
key = it.next().toString();
values = (String[]) map.get(key);
for (int i = 0; i < values.length; i++) {
values[i] = new String(values[i].getBytes("ISO-8859-1"),"UTF-8");
}
}
你只是把request里面的参数的值取出来了,怎么再传回去覆盖原来的值呢,有什么函数吗?

追答

这是过滤器,你在执行post和get请求的之前就被过滤到了,所以你不用担心把转好的值再赋值

追问

我已经试过了,有种快疯了的感觉。。。。你把转码后的值放到values[]里面有何用呢,request里面存放的还是为转码的值啊。

追答

你还没明白过滤器的作用机制

encoding

com.util.EncodingFilter

encoding

/*

你在web.xml中配置了过滤器了没有,没有配置是不起作用的

追问

配置了啊

code
com.lovo.cq.shopping10_1.filter.UnicodeFilter

code
/*

追答

com.lovo.cq.shopping10_1.filter.UnicodeFilter
你这个类确定是实现了filter接口吗,如果实现了,你在dofilter中打印一句话,调试一下

追问

不好意思,不是过滤器的问题,是mysql数据库编码的问题,过滤器过滤之后的数据仍然是中文,我已经验证过了,不过还是谢谢你

本回答被网友采纳
第2个回答  2012-03-29
UTF-8不支持中文,支持中文的只有GBK和GB2312
还有如果用JS传参数带中文,那是需要转编码,类似
if(request.getParameter("aaa") != null){
String a = new String(request.getParameter("aaa").getBytes("iso8859-1"),"gb2312");
}
相似回答