编码
常见字符编码:iso-8859-1(不支持中文)、gb2312、gbk、gb18030(系统默认编码,中国的国标码)、utf-8(万国码,支持全世界的编码,所以我们使用这个)
1. 响应编码
* 当使用response.getWriter()来向客户端发送字符数据时,如果在之前没有设置编码,那么默认使用iso,因为iso不支持中文,一定乱码
* 在使用response.getWriter()之前可以使用response.setCharaceterEncoding()来设置字符流的编码为gbk或utf-8,当然我们通常会选择utf-8。这样使用response.getWriter()发送的字符就是使用utf-8编码的。但还是会出现乱码!因为浏览器并不知道服务器发送过来的是什么编码的数据!这时浏览器会使用gbk来解码,所以乱码!
* 在使用response.getWriter()之前可以使用response.setHeader("Content-type","text/html;charset=utf-8")来设置响应头,通知浏览器服务器这边使用的是utf-8编码,而且在调用setHeader()后,还会自动执行setCharacterEncding()方法。这样浏览器会使用utf-8解码,所以就不会乱码了!
* setHeader("Content-Type", "text/html;charset=utf-8")的快捷方法是:setContentType("text/html;charset=utf-8)。
最后我们需要把链接中的中文参数,使用url来编码!今天不行,因为html中不能给出java代码,但后面学了jsp就可以了。
什么是编码?
因为计算机中只能存放二进制的数字,那么我们使用的文字就需要编码来转化成数字,这样才能存到计算机内存当中。
常见字符编码
1、iso-8859-1(不支持中文,欧洲用的比较多)
2、gb2312, gbk, gb18030 (系统默认编码,中国的国标码)
3、utf-8(万国码,支持全世界的编码,所以我们用这个)
响应编码图解
字符:
我们计算机的内存,硬盘存的数据都是以字节来存,字符只不过是数据的一种体现,字符是给人看的。
服务器(tomcat)响应客户端也是字节来传输数据的。
响应编码
服务器向客户端发送数据,服务器的默认编码是iso-8859-1,而我们的客户端使用的默认编码是gbk来解码。
本身iso-8859-1不支持中文,发送过去的乱码,那么我们浏览器用gbk来解码,更乱!!!
例如:服务器向客户端发送语句
response.getWrite().prin("大家好"),那么服务器会用iso-8859-1把中文“大家好”,编码成自己,然后发送给客户端,而客户端会用gbk编码表来对这些字节进行解码,发现自己和编码表对不上,于是就报错啦。
设置编码:
1、response.setCharacterEncoding("uft-8"),即response.getWriter();这个字符流,发送出去的字符都使用了utf-8
2、responses.setHeader("Content-Type","text/html;charset=utf-8");
这个方法,不只是设置相应头,而且它会设置setCharacterEncoding(),即一名顶两句。
设置Content-Type头还有一个便捷方法:response.setContentType(text/html;charset=utf-8); à 我们使用这个
浏览器默认的编码是:gbk
服务器默认的编码是:iso
那么要想不乱码,就得两个地方设置的编码都是一样的才行。
想不乱:
在使用getWriter()方法之前,先调用下面这个方法:
response.setContentType("text/html;charset=utf-8")
图解:请谨记这个图。