-
(解决请求乱码)浏览器编码,服务器解码
请求由请求行、请求头、请求体三部分组成
无论是get请求还是post请求,浏览器按照页面编码对参数进行编码并发送给服务器(如果页面不指定编码默认为操作系统编码gb2312),
get请求参数通过请求行Request URL发送,服务器接收参数按照tomcat默认编码解码 ,tomcat的server.xml配置文件中有URIEncoding属性(我的tomcat为8.5版本所以没有发生乱码,8.0之后的tomcat默认编码为utf-8;8.0之前的tomcat默认编码为iso8859-1所以会乱码)
<Service name="Catalina"> <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/> </Service>
post请求参数通过请求体Request Body发送,tomcat中设置的默认编码只能解决请求行(即URL)上的中文参数 ,服务器对请求体中的参数解码需要通过request.setCharacterEncoding(“utf-8”) 来告诉服务器用utf-8的编码形式对请求体进行解码(服务器对请求体的默认解码编码格式为iso8859-1),
默认编码格式:
- 浏览器对请求体的默认编码为iso8859-1,若页面指定编码格式,则浏览器以指定的页面编码格式对请求体编码(请求行参数同理)
- 服务器对请求参数的解码分两种情况。
第一种是对get请求的请求行参数解码,若tomcat在8.0以上版本的话,默认解码编码格式为utf-8;若tomcat在8.0以下版本的话,默认解码编码格式为iso8859-1。
第二种是对post请求的请求体参数解码,tomcat默认对请求体解码编码格式为iso8859-1
-
(解决响应乱码)服务器编码,浏览器解码
响应由响应行、响应头、响应体三部分组成
无论get请求响应还是post请求响应,都是在服务器处理好数据之后响应浏览器,如果服务器端不指定响应编码,那么服务器端对响应体的默认编码为iso8859-1,服务器通过response.setContentType(“text/html;charset=utf-8”)将响应体中的内容用utf-8编码,同时告诉浏览器用utf-8对响应体进行解码
-
在浏览器上如何查看页面编码格式
答:F12打开开发者工具,console控制台上输入下面两个命令- document.charset
- document.characterSet