9.1 常见字符集
• ASCII
最原始的一套编码,所有编码都是由一个字节的二进制数对应,尽管包含8位,但是第一位始终是0,也就是128个。单字节编码。
字符集前128个字符与ASCII完全相同,后128个字符扩展增加了其他语言字符,单字节编码。
• GB2312和GBK
GB2312是中华人民共和国国家标准汉字信息交换编码,采用两个字节来编码一个中文汉字,涵盖了大部分常用的中文字符
GBK对GB2312进行扩展的中文字符集,它完全兼容GB2312,还对繁体和一些不常用的汉字和特殊字符进行扩展支持
• UNICODE
采用两个字节保存编码,前256个字符与ISO-8859-1是完全统一的,只不过他的第一个字节数字为0,它包含世界上大多数国家的大多数语言文字和字符。
• UTF-8
对于0~127的ASCII字符,UTF-8采用一个字节表示,并且编码和ASCII是一样的,如果UNICODE是在0X0080和0x007f之间的字符,UTF-8则用两个字节表示,如果UNICODE是在0X0800和0XFFF之间的字符,对应的UTF-8则采用3个字节。
9.2 乱码原因
Java语言内部采用Unicode字符集来表示字符,一旦与外界的程序打交道就会存在一个字符转换的过程。
对于Java Web应用程序,客户端浏览器采用默认的字符集(通常是GBK),而Web容器对POST提交的数据采用ISO-8859-1的编码方式,数据在这些系统中穿梭很可能就会出现乱码的问题。
9.3 解决乱码
1、如何解决服务器返回页面中文乱码问题
response.setContentType("text/html;charset=UTF-8");
2、解决post方式请求表单参数中文乱码问题
request.setCharacterEncoding("UTF-8");//注意此语句一定要设置在取参数的语句之前
3、解决get方式请求中文参数乱码问题
修改server.xml
<Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>