问题Post解决方案Get解决方案
URL编码
解决办法 演示 问题
首先演示get的乱码
我们传进了带中文的参数,结果发现控制台上确实是乱码
然后用post演示,发现也是乱码
由于我们知道post的读入数据的方式是字符串流,而且用的编码方式是ISO-8859-1所以我们规定它编码方式为UTF-8,把它放在doGet或doPost方法内的最上面即可
get就麻烦多了,因为get底层的获取方式与post不一样,post是读入流,而get是字节读入
如果用刚刚post的方式,我们可以看到结果还是乱码,这说明确实不能直接套用
然后再剖析一下原理我们发现就像下面这张图
而tomcat里的ISO-8859-1是写死的,并且并没有仍和解码方式给我们,所以不能用’设置编码方式’来解决
将字符串按照编码方式转为二进制,每个字节转为2个16进制并在前面加上%
在java里面由这两个工具类可以进行URL编码与解码:
URLEncoder里encode
URLDecoder里decode
我们可以发现这两个不同的编码方式有一个地方是共同的:底层二进制
因此,我们可以把它转成二进制字节数据,再转成UTF8就好了
传入的参数是张三
我们可以发现张三确实又变回了张三
所以写成一句话就是
${name} = new String(username.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);
因此,我们可以实现对后台乱码的处理
写一个表单,链向Servlet.java
重新编码与输出
结果便没有了乱码!
感谢黑马!