当页面中提交包含中文的请求时,在服务端有可能出现中文乱码问题。
一、乱码产生原因
Http协议中规定,数据传输采用字节编码方式,因为通信的数据不仅仅是字符。当用户通过浏览器提交一个包含 UTF-8 编码格式的两个字的中文请求时,浏览器会将这两个中文字符变为六个字节(一般一个 UTF-8 汉字占用三个字节),并将这六个字节上传至 Tomcat 服务器。
Tomcat 服务器在接收到这六个字节后,并不知道它们原始采用的是什么字符编码。而Tomcat默认的编码格式为 ISO-8859-1。所以会将这六个字节按照 ISO-8859-1 的格式进行编码,编码后在控制台显示,所以在控制台会显示乱码。
二、请求乱码解决方案
2.1 针对POST提交方式
在接收请求参数之前先通过 request 的 setCharacterEncoding()方法,指定请求体的字符编码格式。
注意:这种方式只能解决POST提交方式中的乱码问题,对于GET提交方式不起作用。因为该方法设置的是请求体中的字符编码,GET提交中的参数不出现在请求体中,而出现在请求行
2.2 针对GET提交方式
对于请求路径中所携带参数的解析,由 Tomcat 服务器完成。而 Tomcat 服务器的字符编码默认