为什么出现乱码
在html页面中提交的数据会被封装在请求request对象中,返回到服务器时,服务器端会默认按照ISO8859-1的编码方式进行编码(ps:老外的软件默认编码是识别英文和数字的ISO8859-1,关于字符集可以我在另一篇文章里有专门提到),我们拿到的中文数据会是乱码的,这是我们针对不同的请求方式,有分别的解决方案
get请求
表单提交的数据会显示在请求行中,也就是我们的浏览器搜索栏里(从?开始,数据以键值对的形式跟在后面,中间用&符号隔开),我们可以使用IE浏览器的开发者工具–>网络查看–>开始跟踪来查看本次请求的内容(IE老版本可能内有”网络”这一选项,建议使用高版本IE).在工具中我们可以看到我们请求的所有信息,包括(客户端请求协议,版本,远程地址,服务器端口号等内容),在我们的servlet伺服程序中可以针对get请求重写doGet()方法,这里,我们将数据按如下方式还原:
byte[] buf = username.getBytes(“ISO8859-1”);按ISO8859-1编码
String username = new String(buf,”UTF-8”);按UTF-8解码
这种方式是通用与get和post方式,get方式只能这样来解码和编码.
post请求
如上可知,如果我们的数据过多,那么每一个用户数据都需要经过那两行代码进行转换,太过麻烦,所以我们的请求一般尽量按照post方式,因为post方式有很方便的方法解决乱码.代码如下:
request.setCharacterEncoding(“UTF-8”);针对请求体内容按UTF-8编码
request.getParameter(“username”)
因为对用post请求,是将提交的数据放在请求体中,不会暴露在搜索栏中,将请求体中的内容通过setCahrracterEncoding方法对数据按照指定字符集编码,这样就不会出现乱码.