XueSeYaoTong的专栏

互相学习

java乱码

java乱码问题

编写java web的程序,不可避免都要处理编码问题,最常见的问题就是中文乱码

大概的思路就是重新编码为gbk或者gb2312,分两种情况

一是get和post形式

二是AJax 形式

第一种:GET和POST,取决于你的页面编码,如果你的页面编码为iso8859_1

使用:String str= new String(req.getParameter("str").toString().getBytes("iso8859_1"), "GBK");

或者    String str= new String(req.getParameter("str").toString().getBytes("iso8859_1"), "GB2312");

但是,这里要注意,必须保证你的页面编码也是iso8859_1的,因为,上面的代码的意思是先将你的字符串变为iso8859_1字节流,

然后再转化为GBK编码,如果你页面传过来的编码是utf-8,那么按照上面的方法就会出现:???乱码

你页面是utf-8的,就要使用如下编码:

String str= new String(req.getParameter("str").toString().getBytes("utf-8"), "GBK");

或者    String str= new String(req.getParameter("str").toString().getBytes("utf-8"), "GB2312");

总之get  post 原则很简单,页面什么编码就转化什么字节流转化编码

第二:Ajax传值

这个比较麻烦,据测试,不同的浏览器有不同的对中文编码,怎么办呢?

我们可以采用js的encodeURI()进行统一的编码,然后在后台进行统一的解码

对应的java解码代码:

str= java.net.URLDecoder.decode(str, "UTF-8");

当然,因为他是utf-8编码,所以也可以采用第一种get post 介绍的方法解码(据测试,用 String(req.getParameter("str").toString().getBytes("utf-8"), "GB2312")解码js的encodeURI()时,会出现乱码,所以还是老老实实的使用java.net.URLDecoder.decode(str, "UTF-8");)

不好意思,刚刚查了资料,上面讲的Get方式有错:

Tomcat对于GET请求并不会考虑使用request.setCharacterEncoding方法设置的编码,而会永远使用iso-8859-1编码,而这位朋友使用的正好是GET请求,因此,tomcat将会使用iso-8859-1将提交的字节转换成字符串。

所以,对于使用get方式传值的时候,统一使用String str= new String(req.getParameter("str").toString().getBytes("iso8859_1"), "GBK");当然,前提是你服务器是tomcat

阅读更多
个人分类: java
上一篇虚拟机与宿主机的连接
下一篇hibernate一对多双向注解
想对作者说点什么? 我来说一句

javaweb乱码解决方法

2012年01月06日 740B 下载

Java乱码学习 Java乱码学习

2010年04月23日 154KB 下载

java乱码终极必杀技

2012年06月29日 1KB 下载

java字符过滤器,过滤器

2011年07月10日 1KB 下载

java乱码自己解决的办法

2012年11月08日 502B 下载

浅谈Unicode编码

2017年08月01日 1.5MB 下载

java配置过滤器,解决乱码

2013年06月21日 2KB 下载

java转码代码

2007年10月28日 352B 下载

没有更多推荐了,返回首页

关闭
关闭