一、post 方式
首先我们看下面一段代码,在该HTML中我们指定的编码为“UTF-8”,如图所示。
在该代码中,我们将表单数据提交给ParamServlet 处理
servlet 会将接收到的数据打印到控制台
控制台会正常显示两个值
然后输入中文
提交后显示乱码
原因分析:
我们在浏览器输入汉字后,浏览器查UTF-8编码表后,将汉字转化成二进制(一个汉字在UTF-8中占三个字节)
发送给服务器处理,如果服务器没做任何控制(以tomcat为例),会默认去查ISO8859-1这个码表(一个字节代表一个字符)来解析数据
iso8859-1里没有那么多字符,有的字在iso8859-1中根本没有对应字符,就用?表示,有对应的就会显示哪些奇怪的字符,就出现了乱码喽,
所以,解决方案就出来了,我们就明确的通知我们的服务器不用ISO8859-1了,请用UTF-8
这回就不会乱码了()
另外 response 与request 相类似
代码如下:
response.setContentType("text/html;charset=utf-8");
二、get方式
以上方案只适用于post方式。因为post方式提交数据,数据在实体内容当中,而get方式提交,数据在url之中
对于get提交只能手动进行乱码解决
由于乱码的底层编码没有改变,所以我们将乱码按照ISO8859-1编码回原来的二进制,得到相应字节数组,我们再去查UTF-8码表,将二进制转换成相应字符
代码如下图:
注:以上划线代码对于post 和get方式乱码均有效。