博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Servlet乱码——request

Posted on 2013-09-27 10:47  xuty@blog  阅读(217)  评论(0)    收藏  举报

servlet的默认编码方式ISO8859_1,

 

如果在servlet中设置response.setContentType("text/xml; charset=utf-8");即返回的结果以UTF-8方式编码

——  StringBuffer sb = new StringBuffer("<?xml version=\"1.0\" encoding=\"utf-8\"?>");返回的XML以utf-8个格式编码


那么获得html(js)页面传递过来的值时,会出现乱码String sex = request.getParameter("sex");//sex=“男”

 

解决方法:String sex=new String(request.getParameter("sex").getBytes("ISO8859_1"),"UTF-8");

—— 这句代码的意思是将sex以ISO8859_1格式重新编码后,再转化为UTF-8编码。

1、getBytes()是将一个字符串转化为一个字节数组。

在Java中,String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如

byte[] b_gbk = "中".getBytes("GBK");
byte[] b_utf8 = "中".getBytes("UTF-8");
byte[] b_iso88591 = "中".getBytes("ISO8859-1");

此处byte[] b_sex=request.getParameter("sex").getBytes("ISO8859-1"); 打印出来的值为[B@1798fdd

2、"UTF-8"不是一定的,主要是要与前台传来字串的页面的编码方式一致。

 

js文件(utf-8)———(servlet自动将其转为ISO8859_1)———>servlet(通过getBytes("ISO8859-1")解码为字节数组,并重新编码为"UTF-8")

 

 

P.S 现在证明一下servlet默认的编码方式是ISO8859_1:

String sex=new String(request.getParameter("sex").getBytes("ISO8859_1"),"ISO8859_1");

//打印为??· 与request.getParameter("sex")直接得到的值相同