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")直接得到的值相同
浙公网安备 33010602011771号