Java核心类库-IO-字符编码

字符编码的发展历程:

  阶段1:

  计算机只认识数字,我们在计算机里一切数据都是以数字来表示,因为英文符号有限,所以规定使用的字节的最高位是0,每一个字节都是以0~127之间的数字来表示,比如A对应65。这就是美国标准信息交换码-ASCII。

  阶段2:

  随着计算机在全球的普及,很多国家和地区都把自己的字符引入了计算机,比如汉字。此时发现一个字节能表示数字范围太小,不能包含所有的中文汉字,那么久规定使用两个字节来表示一个汉字。规定:原有的ASCII字符的编码保持不变,仍使用一个字节来表示,为了区别一个中文字符与两个ASCII码字符,中文字符的每个字节最高位规定为1(中文的二进制为负数)。这个规范就是GB2312。

  阶段3:

  新的问题,在中国是认识汉字的,但是如果把汉字传递给其他国家,该国家的码表中没有收录汉字,其实就显示另一个符号或者乱码。

  为了解决各个国家因为本地文化字符编码带来的影响,咋们就把全世界的符号统一进行编码-Unicode编码。此时某一个字符在全世界任何地方都是固定的,比如‘哥’这个字在任何地方都是以十六进制S4E5来表示。Unicode的编码字符都占有2个字节大小。

 

常见的字符集:

ASCII:占一个字节,只能包含128个字符,不能表示汉字。

ISO-8859-1(latin-1):占一个字节,收录西欧语言,不能表示汉字。

ANSI:占两个字节,在简体中文的操作系统中ANSI就是GB2312

GB2312/GBK/GB18030:占两个字节,支持中文。

UTF-8:是一种针对Unicode的可变长度字符编码,又称万国码,是Unicode的实现方式之一。

编码中的第一个字节仍与ASCII兼容,这使得原来处理ACSII字符的软件无须或只须做少部分修改,即可继续使用。

因此,他逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用编码。互联网工程小组(IETF)要求所有互联网协议都必须支持UTF-8编码。

UTF-8 BOM:是微软的编码,默认占3个字节(比原有的UTF-8格式多三个字节),不要使用。

 

存储字母,数字和汉字:

存储字母和数字无论是什么字符集都占一个字符。

存储汉字:GBK家族占两个字节,UTF-8家族占三个字节。

 

不能使用单字节的字符集来存储(ASCII/IOS-8859-1)来存储中文。

posted @ 2017-05-21 21:11  wenxudong  阅读(177)  评论(0编辑  收藏  举报