字符编码的发展历程(一):

阶段1:

  计算机只认识数字,我们在计算机里一切数据都是以数字来表示.

因为英文和符号有限,所以规定使用一个字节来表示英文和符号,且最高位是0.每一个英文和符号都是以0~127之间的数字来表示,比如A对应65,a对应97.

这就是美国标准信息交换码-ASCII.


阶段2:

  随着计算机在全球的普及,很多国家和地区都把自己的字符引入了计算机,比如汉字.

此时发现一个字节能表示数字范围太小,不能包含所有的中文汉字,那么就规定使用两个字节来表示一个汉字.

规定:原有的ASCII字符的编码保持不变,仍然使用一个字节表示,为了区别一个中文字符与两个ASCII码字符,

中文字符的每个字节最高位规定为1(中文的二进制是负数).这个规范就是GB2312编码,

后来在GB2312的基础上增加了更多的中文字符,比如汉字,也就出现了GBK.


阶段3:

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

为了解决各个国家因为本地化字符编码带来的影响,咱们就把全世界所有的符号统一进行编码-Unicode编码.

此时某一个字符在全世界任何地方都是固定的,比如'哥',在任何地方都是以十六进制的54E5来表示.

Unicode的编码字符都占有2个字节大小.

--------------------------------------------------------------------------------------------------------------


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

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

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

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


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

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

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


UTF-8 BOM:MS搞出来的编码,默认占3个字节(比UTF-8多出3个字节),不要使用这个.

--------------------------------------------------------------------------------------------------------------


字符的编码和解码操作:

编码:  把字符串转换为byte数组.

解码: 把byte数组转换为字符串.

一定要保证编码和解码的字符相同,否则乱码.



你可能感兴趣的:(Java中的编码,解码以及应用场景)