一、基础知识
一个字节=8位
1、位(bit):
其中每一个逻辑0或者1便是一个位。例如这个例子里的1000 1110共有八个位,它的英文名字叫(bit),是计算机中最基本的单位。
2、字节(byte):
Byte,是由八个位组成的一个单元,也就是8个bit组成1个Byte。字节有什么用呢? 在计算机科学中,用于表示ASCII字符,便是运用字节来记录表示字母和一些符号~例如字符A便用 “0100 0001”来表示。
3、字符(character):
一个字符占几个字节?不同编码方案中占用的字节数是不一样的。
在ASCII码编码方案中,一个英文字符占用一个字节空间,一个汉字字符占用两个字节空间;
在Unicode编码方案中,一个英文字符或一个汉字字符都占用两个字节空间;
在UTF-8编码方案中, 一个英文字符占用一个字节空间,一个汉字字符占用三个字节空间。
在GBK编码方案中, 一个英文字符占用一个字节空间,一个中文字符占用两个字节空间。
“字节”是一个8位的物理存贮单元,而“字符”则是一个文化相关的符号。
二、ASCII 编码
ASCII码是美国信息交换标准编码,是世界上最通用的计算机符号编码。ASCII码用7个二进制位共编码128个字符。
在ASCII编码中,一个英文字母或其他字符占用一个字节,一个中文汉字在ASCII码的兼容方案中占用两个字节。
三、unicode 编码 – 定长编码
统一码,Universal Multiple-OctetCoded Character Set,简称UCS,俗称unicode,万国码。
世界上所有的语言包含的符号,都在unicode里面有唯一的编码。Uicode采用两个字节的编码方式,把世界上所有的语言的文字字符都容纳了进来。
在Unicode的编码方案中,一个英文字母或字符占用两个字节的空间,同样一个中文字符包括繁体字,也是占用两个字节的空间。
四、utf-8 编码 – 不定长编码
互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。
UTF-8编码使用1~4个字节对所有的字符进行编码,对于ASCIl码的那些字符采用一个字节,从而保证与ASCIl的完全兼容。
对于拉丁文、希伯来文等字母采用2个字节进行编码;对于中日韩、东南亚等文字,采用3个字节进行编码。
UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。