您的位置:首页 > 编程语言 > Java开发

javaweb常见编码类型以及使用场景

2018-04-09 14:06 113 查看

参考深入分析javaweb技术内幕第三章

常见编码类型

1,ASCII码:
单字节编码,共128字符,用1个字节的低七位表示,0-31是控制字符如换行,回车,删除等,32-126是打印字符,可以通过键盘输入并且能够显示出来

2,ISO-8859-1
在ASCII码基础上扩展的编码,包括ISO-8859-1到ISO-8859-15,其中ISO-8859-1涵盖了大多数西欧字符,所以应用的最广泛。单字节编码,共256个字符

3,GB2312
全称“信息技术中文编码字符集”,双字节编码,编码范围A1-F7,其中A1-A9是符号区,总共包含682个符号;B0-B7是汉字区,包含6763个字汉

4,GBK
全称“汉字内码扩展规范”,为了扩展GB2312而出现,编码范围是8140-FEFE(去掉XX7F),总共有23940个码位,能表示31003个汉字;兼容GB2312,可以用GBK解码GB2312的汉字

5,GB18030
全称是“信息技术 中文编码字符集”,是我国的强制标准,它可能是单字节,双字节或者四字节编码,它的编码与GB2312兼容,实际应用中不广泛

6,UTF-16
用两个字节来表示Unicode的转化格式,采用定长的表示方法,16bit,所以叫UTF-16,每两个字节表示一个字符,大大简化了字符串操作,所以这也是JAVA以UTF-16作为内存的字符存储格式的重要原因

7,UTF-8
UTF-8采用变长的表示方法。每个编码区有不同的字码长度,不同类型的字符可以由1-6个字节组成。
如果是1字节,最高位(第8位)是0,则表示这个是1个ASCII字符(00-7F)
如果是一个字节,以11开头,表示这个是一个双字节的字符,这个是它的首字节
如果是一个字节,以10开头,表示这个是一个双字节的字符,这个是它的末字节,要向前查找,才能得到当前字符的首字节。

对于双字节的编码:由于不同处理器对2字节的处理方式不同,有Big-endian(高位字节在前,低位字节在后),或little-endian(低位字节在前,高位字节在后)编码(大端模式and小端模式),所以前面有两个字节用来保持BYTE_ORDER_MARK值

UTF-8 VS UTF16:
UTF-16用顺序编码,不能对单个字符的编码值进行校验,如果一个字符码值损坏,后面的所有码值都将受到影响。编码效率高,但是浪费存储空间,适合本地使用
UTF-8 适合网络传输,效率介于GBK和UTF-16之间,是理想的中文编码方式。

在javaWeb中需要编码的场景

URL的编解码
http://localhost:8080/examples/servlets/servlet/名字?author=我

例子 对应的概念
http scheme
localhost Domain
8080 port
examples ContextPath
servlets/servlet ServletPath
名字 PathInfo
author=我 QueryString

其中pathInfo和queryString需要分别进行编解码操作(可能是不一样的编码)
默认的iso-8859-1,所以在URL中,要尽量避免使用费非ASCII的字符,不然不是乱码就是配起来麻烦
具体配置方法参考javaweb技术内幕P78

HTTP Header的编解码
默认是ISO-8859-1,而且不能设置,所以header中要注意一定不能出现非ASCII字符,不然可能会乱码
如果一定要传递非ASCII的字符,可以将字符先用org.apache.catalina.util.URLEnconder编码,再添加到Header中,这样浏览器传递的时候就不会丢失信息了,在要访问的时候再按照相应的字符集解码即可

POST表单的编解码
通过header contentType的Charset编码格式对表单参数进行的编码,然后提交到服务端,服务端同样用contentType中的字符集进行解码。所以一般不会出现问题
要注意,一定要在request.getParameter之前进行request.setCharacterEncoding(charset)设置,如果没有设置就解析,还是会走默认的iso-8859-1

HTTP Body的编解码
在response.setCharacterEncoding中设置返回的编解码字符集,会覆盖request.setCharacterEncoding中设置的值,并且通过header的Content-Type返回给客户端, 如果http header中的Content-Type没有设置charset,那么浏览器将根据html的

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐