产生原因
- 浏览器向服务器发送数据时,会将数据通过URL编码【UTF-8编码方式】成16进制格式通过网络发送给服务器
- 服务器接收到数据后,会使用【ISO-8859-1解码方式】将数据转化成字符串
- 正是编码和解码方式的差异导致了数据转换的格式乱码
解决办法
先看一张图,来自黑马的讲解
参数传递,讲到底还是字节数据的传递,所以即使服务器端解码出错,但字节数据是不会有错的,
按照这个思路,我们在servlet的doPost方法中加上以下代码即可:
String username = request.getParameter("username");
System.out.println("解决乱码前:"+username);
username= new String(usernmae.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);
System.out.println("解决乱码后:"+username);