java web开拓过程中,中文乱码是一个旧调重弹的话题了,那么该如何办理呢?

大致思路便是重新编码为gbk或者gb2312,分两种情形

a是get和post形式

jsp传值action乱码Java编程中文乱码问题 jQuery

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中文乱码的全部内容了,感谢大家的阅读!