javaweb 中的乱码问题 一、post 方式  二、get方式

首先我们看下面一段代码,在该HTML中我们指定的编码为“UTF-8”,如图所示。

javaweb 中的乱码问题
一、post 方式
 二、get方式

在该代码中,我们将表单数据提交给ParamServlet 处理

javaweb 中的乱码问题
一、post 方式
 二、get方式

servlet 会将接收到的数据打印到控制台

javaweb 中的乱码问题
一、post 方式
 二、get方式

控制台会正常显示两个值

javaweb 中的乱码问题
一、post 方式
 二、get方式

然后输入中文

javaweb 中的乱码问题
一、post 方式
 二、get方式

提交后显示乱码

javaweb 中的乱码问题
一、post 方式
 二、get方式

原因分析:

我们在浏览器输入汉字后,浏览器查UTF-8编码表后,将汉字转化成二进制(一个汉字在UTF-8中占三个字节)

发送给服务器处理,如果服务器没做任何控制(以tomcat为例),会默认去查ISO8859-1这个码表(一个字节代表一个字符)来解析数据

iso8859-1里没有那么多字符,有的字在iso8859-1中根本没有对应字符,就用?表示,有对应的就会显示哪些奇怪的字符,就出现了乱码喽,

所以,解决方案就出来了,我们就明确的通知我们的服务器不用ISO8859-1了,请用UTF-8

javaweb 中的乱码问题
一、post 方式
 二、get方式

这回就不会乱码了()

javaweb 中的乱码问题
一、post 方式
 二、get方式

另外  response 与request 相类似

代码如下:

response.setContentType("text/html;charset=utf-8");

 二、get方式

以上方案只适用于post方式。因为post方式提交数据,数据在实体内容当中,而get方式提交,数据在url之中

对于get提交只能手动进行乱码解决

 由于乱码的底层编码没有改变,所以我们将乱码按照ISO8859-1编码回原来的二进制,得到相应字节数组,我们再去查UTF-8码表,将二进制转换成相应字符

代码如下图:

javaweb 中的乱码问题
一、post 方式
 二、get方式

注:以上划线代码对于post 和get方式乱码均有效。