[错误]解决Myeclipse中的javaWeb项目向mysql数据库执行sql语句取不到结果,request获取的参数出现中文乱码
[错误]解决Myeclipse中的javaWeb项目向mysql数据库执行sql语句取不到结果,request获取的参数出现中文乱码–>
问题:
在控制台上测试文学类的共有18种,然而Servlet返回的结果却不正确.并且商品分类显示乱码.
分析:
- 在控制台上测试能够得到正确的结果 说明sql语句没有问题
- Servlet返回的结果却不正确,可能是获取到的request参数出现了问题.
- 获取到的参数是通过url传递的,请求方式是get
- tomcat收到了这批数据,getParameter 默认使用ISO-8859-1去解码
- 而我的开发环境使用的是utf-8编码,这就使得get请求过来的数据在url地址栏上就已经经过ISO-8859-1编码了,所以我们取到的就是乱码,
解决方案
-
代码转码
比如:String username = request.getParameter("username");
//get请求过来的数据,在url地址栏上就已经经过编码了,所以我们取到的就是乱码,
//tomcat收到了这批数据,getParameter 默认使用ISO-8859-1去解码//先让文字回到ISO-8859-1对应的字节数组 , 然后再按utf-8组拼字符串
username = new String(username.getBytes("ISO-8859-1") , "UTF-8");
-
(推荐) 直接在tomcat里面做设置处理 (以后get请求过来的数据永远都是用UTF-8编码。)
conf/server.xml 加上URIEncoding=“utf-8”<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
我采用第二种解决方案,一劳永逸!!!找到Tomcat的安装目录conf/server.xml,使用高级记事本(比如EditPlus)打开,相应位置加上URIEncoding="utf-8"
最终完美解决:
踩过的坑
-
之前一直以为是数据库的编码和myEclipse的编码不一致导致的,通过网上查阅资料,查看我的数据库和myeclipse的编码,发现都是utf-8编码,没有不一致.
SHOW CREATE DATABASE bookstore;
查看我的数据库编码 -
接着看到其他人的解决方案,考虑说是不是jdbc的url没有指定约束,于是我修改我的c3p0-config.xml
jdbc:mysql://localhost:3306/bookstore==>
jdbc:mysql://localhost:3306/bookstore?useUnicode=true&
characterEncoding=utf-8
然而并没有用…
注意: 在xmi文件中需要将&进行转义&
即jdbc:mysql://localhost:3306/bookstore?useUnicode=true&characterEncoding=utf-8这种写法是错误的,xml不能识别,会报错!!!
小结
- 总之,一定要注意中文乱码问题,无论是客户端提交数据给服务器端,还是服务器返回数据给客户端 ,如果数据中带有中文的话,有可能会出现乱码情况,一定要解决中文乱码问题,
- 服务器总客户端获取的中文参数一定不能有乱码, 否则使用获取到的乱码参数去执行sql, 是得不到正确的结果的!!!
本文来源 互联网收集,文章内容系作者个人观点,不代表 本站 对观点赞同或支持。如需转载,请注明文章来源,如您发现有涉嫌抄袭侵权的内容,请联系本站核实处理。