永发信息网

急~~~~~·JSP mysql中文乱码问题

答案:4  悬赏:30  手机版
解决时间 2021-01-14 20:33
  • 提问者网友:凉末
  • 2021-01-13 22:04
急~~~~~·JSP mysql中文乱码问题
最佳答案
  • 五星知识达人网友:人间朝暮
  • 2021-01-13 22:11
我也曾经因为乱码搞得很郁闷。如果你用的不是post方法,请参照⑧魂之挽歌写的。

就你的配置,如果你用POST方法提交,网页上应该没有错。你可以试试在控制台用System.out.println(username);打印出来看看提交的时候有没有乱码。

如果这里正常,那么就是连接数据库时的问题啦。请在jdbc url连接上加上

?useUnicode=true;characterEncoding=UTF-8

比如在hibernate中配置Url
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8

详细的方案在我QQ空间有。
需要的话可以加我QQ:694333592
全部回答
  • 1楼网友:渡鹤影
  • 2021-01-14 01:03
楼主这个过滤器只能过滤post请求,无法过滤get请求,我说的对吧。当给你
form表单里的method设置为get或者使用默认值(默认值是get)的时候就无法处理中文问题,就是这里
的method。因为tomcat的bug,使用get请求的时候无论pageEncoding设置成什么,都使用ISO8859-1编码。使用ISO8859-1编码的时候数据时以字符(问题就出现在这里,两个字符才是一个字节,一个字节才是一个中文)形式传递的。好了原因找到了
如果你还想用你的过滤器(但是你的过滤器存在隐患,还是不要用了)那做你将所有form中的method都设置成post即可。
如果你想用个完善的解决方案,那就给你讲一个。
解决方案如下:
首先:判断请求如果是post,直setCharacterEncoding(encode);
然后:如果请求时get。就遍历参数列表,将所有参数以ISO8859-1的方式转换成字节数组,然后再将字节数组构造成新的中文字符串。然后重新构造request请求对象,替换掉原来的请求。
下面的过滤器我一直在用,能转换各种请求的各种编码。
package com.zhangxuliang.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.HttpServletRequestWrapper;
public class PageEncodingFilter implements Filter {
private String encode;

class Request extends HttpServletRequestWrapper
{
public Request(HttpServletRequest request) {
super(request);
}

public String toChi(String input) {
try {
byte[] bytes = input.getBytes("ISO8859-1");
return new String(bytes, encode);
}
catch (Exception ex) {
}
return null;
}

private HttpServletRequest getHttpServletRequest()
{
return (HttpServletRequest)super.getRequest();
}

public String getParameter(String name)
{
return
toChi(getHttpServletRequest().getParameter(name));
}

public String[] getParameterValues(String name)
{
String values[] =
getHttpServletRequest().getParameterValues(name);
if (values != null) {
for (int i = 0; i < values.length; i++) {
values[i] = toChi(values[i]);
}
}
return values;
}
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse
response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpreq = (HttpServletRequest)request;
if(httpreq.getMethod().equals("POST")) {
request.setCharacterEncoding(encode);
} else {
request = new Request(httpreq);
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws
ServletException {
encode = filterConfig.getInitParameter("encode");
}
}
web.xml配置如下

PageEncodingFilter
com.zhangxuliang.filter.PageEncodingFilter


encode
utf-8



PageEncodingFilter
/*

费了这么大力气楼主要给好评哦!
  • 2楼网友:患得患失的劫
  • 2021-01-13 23:44
ServletRequest req这个对象是获取数据的,你在着设置为utf-8是错的,应为浏览器发送的数据不是UTF-8编码,这里应该设置为浏览器使用的编码,换gbk或gb2312试试
  • 3楼网友:夜余生
  • 2021-01-13 23:01
试试getBytes("8859_1"),"gb2312"
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯