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的方式进行编码,就形成了中文 “中”。












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值