JavaWeb中关于请求乱码的讲解
首先先了解一下Tomcat服务器(这里服务器用Tomcat)编码格式。
TomCat服务器的编码格式为ISO-8859-1,但注意ISO-8859-1不支持中文,并且一个字符由两个字节组成。
这里再另外说两种编码格式,UTF-8和GBK,UTF-8编码的一个字符由三个字节组成,GBK编码的一个字符由两个字节组成。
现在看一下数据请求的图解,如图所示,浏览器数据传输到服务器是以字节为单位,而服务器数据传输到Java程序是以字符形式传递,
所以如果编码不统一,java程序中得到的前台传递的数据肯定是乱码。
解决方法(浏览器和Java程序以UTF-8编码进行讲解):
一:只适用于POST提交方式
request.setCharacterEncoding("UTF-8");用来设置服务器的编码方式为UTF-8。
二:GET提交方式
String 新的变量名 =new String ( 前台提交数据.getBytes("iso-8859-1" ), "utf-8");
如图:
解析如下(以传输一个字符 ”中“为例):
首先浏览器中的 “中” 是用UTF-8编码的,而UTF-8一个字符由三个字节组成,所以浏览器传递到服务器的时候是传递的三个字节,
而服务器是用ISO-8859-1的编码格式进行解码的,把前两个字节解析成一个字符,剩下的一个字节会补0(计算机底层是由二进制编码的,存的都是0101)变成两个字节,然
后解码成另外一个字符,然后传递给Java程序,而Java程序是用UTF-8的编码方式进行解码的,将用 ISO-8859-1编码的字符(两个字节)用UTF-8(三个字节)进行解码自然
不会成功的输出 “中”,所以在Java程序端需要用先用 ISO-8859-1的编码方式进行解码,变成对应的三个字节(补的0会舍弃),然后将这三个字节再按照UTF-8的方式进行编码,就形成了中文 “中”。