第3章 深入分析Java Web中的中文编码问题

本文深入探讨了计算机中信息存储的基本单位——字节,并详细对比了ASCII、ISO-8859-1、GB2312、GBK、UTF-16及UTF-8等编码格式的特点与适用场景。揭示了各种编码格式如何处理中文字符,以及它们在编码效率和安全性上的权衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算机中存储信息的最小单元是一个字节,即8个bit,所以能表示的字符范围是0~255个。

ASCII码总共128个。
ISO-8858-1总共能表示256个字符。
GB2313是双字节编码,总的编码范围是A1-F7,包含6763个汉字。
GBK总共有23840个码位,它能表示21003个汉字。
UTF-16大部分是两个字节,少部分是4个字节。
UTF-8采用了一种变长技术,每个编码区域有不同的字码长度。


UTF-8有以下编码规则:
如果一个字节,最高位为0,表示这是一个ASCII字符。
如果一个字节,以11开头,连续的1的个数暗示这个字符的字节数,110*****代表它是双字节UTF-8字符的首字节。
如果一个字节,以10开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节。


中文字符经过ISO-8859-1编码会丢失信息,通常我们称之为“黑洞”,它会把不认识的字符吸收掉。


几种编码格式的比较

对中文字符几种编码格式都能处理,GB2312与GBK编码规则类似,但是GBK范围更大,它能处理所有汉字字符。UTF-16与UTF-8都是处理Unicode编码,它们的编码规则不太相同,相对来说UTF-16编码效率最高,字符到字节相互转换更简单,它适合在本地磁盘与内存之间使用,可以进行字符和字节之间的快速切换,如Java的内存编码就采用UTF-16编码,但它不适合在网络之间传输。UTF-8对ASCII字符采用单字节存储,另外单个字符损坏也不会影响后面的其他字符,编码效率介于GBK和UTF-16之间,所以UTF-8在编码效率上和编码安全性上做了平衡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值