一、乱码原因
当我们使用request对象,发送请求时,会对你要获取的参数进行编码。在此过程中使用的编码方式是ISO8859-1的编码方式。而这种编码方式是不支持中文的,所以会造成乱码。
二、解决方法
首先介绍通用的解决方法,对于get和post提交方式都适用
我们先在html中写入一个简单的表单,表单的提交方式设置为post
然后我们在service方法中写入代码来获取我们输入的姓名,并在控制台输出
String parameter = request.getParameter("username");
System.out.println(parameter);
运行html文件,此时我们在浏览器中输入内容,点击提交按钮后
我们可以看到,在控制台输出的内容为乱码
这是因为获取参数时采用了ISO8859的编码方法,所以要想解决问题我们就需要将现在的乱码转为乱码前的二进制位。再使用UTF-8的编码方式
在之前的基础上我们增添增添代码,最后再次在控制台输出一次编码后的参数
再次运行,输入与之前相同的数据,在控制台中查看结果
String parameter = request.getParameter("username");
System.out.println(parameter);
//将乱码转回用ISO8859-1编码前的二进制位
byte[] bytes = parameter.getBytes("ISO8859-1");
//再使用UTF-8进行编码
parameter = new string(bytes,"UTF-8");
System.out.println(parameter);
可以看到经过重新编码,中文乱码问题得到了解决
三、注意事项
刚才我们介绍了通用方法,但我们也可以发现他的弊端,就是如果输入的数据量很大,就会很繁琐。所以针对使用post的提交方式我们可以使用一种更为简单的方式来解决乱码的问题。
注:使用get的提交方式时该方法不适用! 不适用! 不适用!
对于使用的是post提交方式我们只需要在获取参数前加上一行代码就可以解决问题。
request.setCharacterEncoding("UTF-8");
String parameter = request.getParameter("username");
System.out.println(parameter);
运行程序,输入数据,再次查看控制台的输出信息可以看到中文乱码问题也得到了解决