您的位置:首页 > 其它

Web应用乱码(2)__原因以及解决方案详解

2013-01-25 15:26 281 查看
---Servlet 中文乱码问题以及解决方案---

Servlet中乱码分为request乱码和response乱码。

一.request中文乱码

request请求分为post和get,产生乱码的原因大致都一样,

但是对于不同的请求方式解决方式不一样。

***Post请求

执行过程:

1.浏览器发出http请求(请求按浏览器的默认码表编码--一般是GB2312)

2.后台Servlet接收到http请求,servlet根据默认码表解析里面的数据(一般是ISO-8859-1)。

乱码原因:

1.发出http请求和解析请求用的码表不一致。

解决方案:

request.setCharacterEncoding("GB2132");

//用同样的码表解析请求

备注:request.setCharacterEncoding 只对Post请求有效

------------------------------------------------------------

***Get请求

过程和原因相同,解决方案不一样。

解决方案:

String username=request.getParameter("name");

String value=null;

value=new String(username.getBytes("ISO-8859-1"),"gb2312");

//先按码表,还原成byte数组,最后再按指定码表生成字符串。

二.response中文乱码

问题引入:

在网上很有效的解决方法是添加:

response.setCharacterEncoding("UTF-8");

解决不了,后来又搜到一条解决方法是:

respnse.setHeader("content-type","text/html;charset=UTF-8");

两句都填上,后来终于解决了这个问题;

Http Response响应 执行过程:

1.web服务端发出Http response响应(响应中的数据可以指定编码)。

2.浏览器接收到Http响应,根据指定码表解码内容(如果不指定编码则会用自己默认的编码)。

乱码原因分析:

1.如果在上面的执行过程中,第一步中的编码和第二步中的编码没有用

同一个码表进行编码和解码,则可能出现问题。

2.同一个数值,在不同码表上对应的值不一样。

解决方案:

response.setCharacterEncoding("UTF-8");

//目的是用于response.getWriter()指定输出的字符流的编码

respnse.setHeader("content-type","text/html;charset=UTF-8");

//目的是为了控制浏览器的行为,指定浏览器用UTF-8进行解码

备注:GBK和GB2312的关系,GBK包含了GB2312。

参考文章:/article/7664822.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: