1、位
计算机存储信息的最小单位
,称之为位(bit)
,音译比特,二进制的一个“0”或一个“1”叫一位。
2、字节
字节(Byte)
是一种计量单位
,表示数据量多少
,它是计算机信息技术用于计量存储容量的一种计量单位,8个二进制位组成1个字节
,而8个二进制位就可以组合出256种状态。所以一个字节
一共可以用来表示256种不同的状态
,每一个状态对应一个符号,就是256个符号,从00000000到11111111
3、字符
字符
是指计算机中使用的文字和符号
,比如“1、2、3、A、B、C、~!·#¥%…*()+”等等。
4、ASCII码
先从最简单的ASCII说起吧,这个大家也熟悉:ASCII
全名是American Standard Code for Information Interchange
, 叫做“美国信息交换标准码”
。上个世纪60年代,美国制定了一套字符编码,对英语字符
与二进制位
之间的关系,做了统一规定,这被称为ASCII码,一直沿用至今。
它用一个字节
(8位宽度)来表示一个英文字符
,字节的最高位
统一规定为0
,剩余7位
用来存储数据
,表示字符
。所以ASCII码能表示128个字符(2的7次方=128)
,也就是0-127字段
。其中包括英文字符
,阿拉伯数字
,西文字符
以及32个控制字符(不能打印)
。
比如:空格"SPACE"是32(二进制00100000),大写的字母A是65(二进制01000001)
5、扩展ASCII码
ASCII码编码的字符太少,后来为了加入其它西文字符的编码,又有了扩展的ASCII编码。扩展的ASCII编码
,实在原来ASCII码的基础上,把字节的最高位
原本统一设置为0
的,也用来存储字符数据
,所以就能表示256个英文字符(0-255)
。
很多国家扩展的ASCII码不统一 ,导致无法通用。0-127字段对应的字符和ASCII码-一样,各个国家都是统一的。但是扩展的部分156- 255字段映射的字符就不相同了。
6、Unicode编码
世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。
由于ASCII编码方式包含的字符太少,基本只对英文字符进行了编码。中国用GB2312等对简体汉字进行了编码别的国家也有自己的编码方式。为了方便交流,防止乱码,Unicode编码方式应运而生。
Unicode编码
被称为万国码
,单一码
,统一码
。它是为每种语言
的每个字符
都设定了统一的,唯一的二进制编码
,以满足跨语言,跨平台进行文本交换和处理的需求,是计算机科学领域的一项业界标准。
Unicode编码用两个字节
来存储一个字符
,所以它最大
可以对65536个字符(2的16次方)
进行编码。它包含了世界上所有的字符
,每个字符都是用独一无二的二进制表示。
用Unicode对英文进行编码,相对于ASCII编码来说,会更占用空间
。Unicode使用两个字节存储,英文存储只需要占用一个字节,用Unicode编码,就会在多出的一个字节上全部置零,这就造成了空间浪费,于是就有了UTF-8编码。
7、UTF-8编码
这是一种变长的编码方式:它可以使用1~4个字节表示一个符号
,根据不同的符号而变化字节长度:
使用规则:
- 对于
单字节
的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的(即当字符在ASCII码的范围时,就用一个字节表示,保留了ASCII字符一个字节的编码做为它的一部分,如此一来UTF-8编码也可以是为视为一种对ASCII码的拓展) - 对于
n字节
的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码
值得注意的是Unicode编码
中一个中文字符
占2
个字节,而UTF-8
一个中文字符
占3
个字节。
从Unicode到UTF-8并不是直接的对应,而是要过一些算法和规则来转换
- 在
计算机内存
中,统一使用Unicode编码
;当需要保存到硬盘
或者需要传输
的时候,就转换为UTF-8编码
- 用
记事本编辑
的时候,从文件读取
的UTF-8字符
被转换为Unicode字符
到内存
里;编辑完成后,保存
的时候再把Unicode转换为UTF-8保存到文件
。
(参考博客:字符编码中ASCII、Unicode和UTF-8的区别)