常见字符编码:iso-8859-1(不支持中文)、gb2312、gbk、gb18030(系统默认编码,中国的国标码)、utf-8(万国码)
一、请求编码
对应两种请求方式的解决方法不同,因为其中get请求没有请求体。
***对于服务器,默认是使用iso-8859-1来解码
1、对于post请求。
它发送给服务器时,编码格式采用你的这个提交数据页面的编码,也就是页面中 。
利用request.setCharacterEncoding("utf-8");来设置请求体编码,此时服务器将会用utf-8解码,而客户端发送来的也是用utf-8编码的,所以呢,不会乱码了。
2、对于get请求(传递数据是直接地址栏里传参)
因为get请求没有请求体,所以不能通过request.setCharacterEncoding("utf-8");来设置编码。
由于服务器拿默认的iso-8859-1来解码,那么咱们就再利用iso-8859-1来给它解码:
byte[]name1=name.getBytes("iso-8859-1");得到一个字节数组,再利用utf-8来重新编码(使用utf-8编码是因为它支持中文)name=newString(name1,"utf-8");这样就OK了。
二、响应编码
**当使用response.getWriter()来向客户端发送字符数据时,如果在之前没有设置编码,那么默认使用iso,因为iso不支持中文,一定乱码。
**当使用response.getWriter()之前可以使用response.setCharaceterEncoding("utf-8")来设置响应体编码,但是虽然服务器用utf-8来编码发送给客户端,但是客户端并不知道你服务器是用撒编码的,浏览器默认拿gbk来解码。还是乱码
**所以,可以设置一个响应头来告诉客户端服务器拿什么编码:
response.setHeader("Content-Type","text/html;charset=utf-8");这样客户端就知道了该拿什么进行编码。
一、请求编码
对应两种请求方式的解决方法不同,因为其中get请求没有请求体。
***对于服务器,默认是使用iso-8859-1来解码
1、对于post请求。
它发送给服务器时,编码格式采用你的这个提交数据页面的编码,也就是页面中 。
利用request.setCharacterEncoding("utf-8");来设置请求体编码,此时服务器将会用utf-8解码,而客户端发送来的也是用utf-8编码的,所以呢,不会乱码了。
2、对于get请求(传递数据是直接地址栏里传参)
因为get请求没有请求体,所以不能通过request.setCharacterEncoding("utf-8");来设置编码。
由于服务器拿默认的iso-8859-1来解码,那么咱们就再利用iso-8859-1来给它解码:
byte[]name1=name.getBytes("iso-8859-1");得到一个字节数组,再利用utf-8来重新编码(使用utf-8编码是因为它支持中文)name=newString(name1,"utf-8");这样就OK了。
二、响应编码
**当使用response.getWriter()来向客户端发送字符数据时,如果在之前没有设置编码,那么默认使用iso,因为iso不支持中文,一定乱码。
**当使用response.getWriter()之前可以使用response.setCharaceterEncoding("utf-8")来设置响应体编码,但是虽然服务器用utf-8来编码发送给客户端,但是客户端并不知道你服务器是用撒编码的,浏览器默认拿gbk来解码。还是乱码
**所以,可以设置一个响应头来告诉客户端服务器拿什么编码:
response.setHeader("Content-Type","text/html;charset=utf-8");这样客户端就知道了该拿什么进行编码。
注意,设置此响应头的同时不只是告诉了客户端编码,它还自动执行了response.setCharaceterEncoding()来设置响应体编码,也就是此一个语句
干了两件事
![](https://i-blog.csdnimg.cn/blog_migrate/462314459486bcb1229ddd97f78d4fdf.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/96614fca229e530c950b91ac467af30f.jpeg)