java web开拓过程中,中文乱码是一个旧调重弹的话题了,那么该如何办理呢?
大致思路便是重新编码为gbk或者gb2312,分两种情形
a是get和post形式
b是ajax 形式
c是javascript url传参乱码问题
d是java web 下载文件名乱码问题
e是utf8办理JSP中文乱码问题
第一种: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
第三:javascript url传参乱码问题
方案一html页面:
function testOne() {
var url = \"大众testTwo.action?expr=\公众+你好;
window.location.href = encodeURI(url);
}
后台java代码:
String expr = new String(
request.getParameter(\"大众expr\"大众).getBytes(\"大众ISO-8859-1\公众),\公众UTF-8\"大众);
方案二html页面:
function testTwo() {
var url = \"大众testTwo.action?expr=\"大众+你好;
window.location.href= encodeURI(encodeURI(url));
}
第四:java web 下载文件名乱码问题
第一种:设置
response.setHeader(\公众Content-Disposition\"大众, \"大众attachment; filename=\公众 + java.net.URLEncoder.encode(fileName, \"大众UTF-8\公众));
这里将文件名编码成UTF-8的格式,就不会涌现URL出错了。IE6下把稳中文笔墨不能超过超过17个。
第二种:设置
response.setHeader( \"大众Content-Disposition\"大众, \"大众attachment;filename=\"大众 + new String( fileName.getBytes(\"大众gb2312\"大众), \"大众ISO8859-1\"大众 ) );
将中文名编码为ISO8859-1的办法。不过该编码只支持简体中文.
按照上诉办法,可以综合一下两种办法办理绝大部分中文问题。
fileName = URLEncoder.encode(fileNameSrc,\"大众UTF-8\公众);
if(fileName.length()>150)//办理IE 6.0 bug {
fileName=new String(fileNameSrc.getBytes(\"大众GBK\"大众),\公众ISO-8859-1\"大众);
response.setHeader( \公众Content-Disposition\公众, \公众attachment;filename=\公众 + fileName);
}
第五:utf8办理JSP中文乱码问题
一样平常说来在每个页面的开始处,加入:<%@ page language=\"大众java\公众 contentType=\公众text/html; charset=UTF-8\公众 pageEncoding=\"大众UTF-8\"大众%><%request.setCharacterEncoding(\"大众UTF-8\"大众);%>
以上便是java中文乱码的全部内容了,感谢大家的阅读!