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

---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。

参考文章:http://blog.csdn.net/xiazdong/article/details/7217022

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值