- 在计算机中,最小的存储单元是1个字节,即8个bit,所以能表示的字符范围是0~255个
- 人类要表示的符号(ABCD、我,你,他等,在计算机眼中,都是符号)太多,无法用一个字节来完全表示
- 要解决这个矛盾,必须要有一个新的数据结构char,而从char到bute必须要编码
一、常见编码格式
1.ASCII码
总共128个,用一个字节的低七位表示,0~31是控制字符:如换行、回车、删除等,32~126是打印字符,可以通过键盘输入并且能够显示出来
2.ISO-8859-1
是国际ISO组织对ASCII码的扩展,涵盖大多数西欧语言字符,所以应用的最广泛。ISO-8859-1仍然是单字节编码,它总共能表示256个字符。
3.GB2312
全称《信息技术 中文编码字符集》,双字节编码。总的编码范围是A1~F7,A1~A9是符号区,总共包含682个符号。B0-F7是汉字区,包含6763个汉字
4.GBK
全称《汉字内码扩展规范》,是为了拓展GB2312,编码范围8140-FEFE(去掉XX7F),总共23940个码位,能表示21003个汉字,编码兼容GB2312,并且不会乱码
5.GB18030
全称《信息技术 中文编码字符集》 是我国强制标准,可能是单字节、双字节或者四字节编码,与GB2312兼容,实际应用并不广泛。
6.UTF-16
具体定义了Unicode字符在计算机中的存取方法,用两个字节来表示Unicode的转化格式,它采用定长的表示方法,不论什么字符都可以用两个字节来表示。大大简化了字符串操作,这也是java中以UTF-16作为内存的字符串存储格式的一个很重要的原因
7.UTF-8
弥补UTF-16由于定长造成的存储空间浪费问题,采用一种变长技术,每个编码区有不同的字符长度。不同类型的字符可以由1!6个字节组成。
UTF-8有以下编码规则:
- 如果是1个字节,最高位(第8位)为0,则表示这是1个ASCII字符(00~7F),所以所有的ASCII码已经是UTF-8了
- 如果是1个字节,以11开头,则连续的1的个数暗示这个字符的字节数,例如:110xxxxx代表他是双字节UTF-8字符的首字节
- 如果是一个字节,以10开始,表示他不是首字节,则需要向前查找才能得到当前字符的首字节。