一、ASCII

  • 由于美国日常使用中只有字母和数字,还有一些控制字符。
  • 一个字节8位,8位可以表示256种字符。因此用一个字节就可以很好满足美国使用要求。  
  • ASCII码一共规定了128个字符,比如SPACE是32,A是65,这128个符号只咱用了一个字节的后面七位,最前面的一位统一规定为0。
Bin(二进制)    Oct(八进制)     Dec(十进制)  Hex(十六进制)  缩写/字符     解释
00000000     0       0      00    NUL(null)    空字符
00000001     1       1      01 SOH(start of headline) 标题开始
00000010     2       2      02  STX (start of text)  正文开始
00110000     60      48      30      0      数字0
00110001     61      49      31      1      数字1
00110010     62      50      32      2      数字2
01000001     101     65      41      A    大写字母A 
01000010     102     66      42      B    大写字母B
01000011     103     67      43      C    大写字母C

二、gb2312和GBK

  • 兼容ascii
  • 第一个字节的最高位为1
  • 由于一个字节已经无法满足数量的要求了。所以采用两个字节来表示汉字。
  • 第一个字节称为“高位字节”(也称“区字节)”,第二个字节称为“低位字节”(也称“位字节”)
  • 区位码=区字节+位字节。例如“啊”字在大多数程序中,会以两个字节,0xB0(第一个字节) 0xA1(第二个字节)储存。

三、Unicode

  • Unicode又称统一码、万国码。

  • 在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符。

  • Unicode为了包含所有文字,使用更多位的字节的表示。

四、utf-8

  • utf-8是Unicode的一种实现方式。
  • 实际情况使用变字节的来表示文字。
  • 使用1~4个字节表示一个字符,根据不同的字符而变化字节长度,当字符在ASCII 码的范围时,就用一个字节表示,而一个中文字符占3个字节。
  • 对于单字节的符号,字节的第一位设为0,后面的7位为这个符号的Unicode码。因此,对于英文字母,UTF8编码和ASCII编码是相同的。
  • 对于非单字节(假设字节长度为N)的符号,第一个字节的前N位都设为1,第N+1设为0,后面字节的前两位一律设为10,剩下的没有提及的二进制,全部为这个符号的Unicode码。
Unicode符号范围     |        UTF-8编码方式
(十六进制)        |              (二进制)
----------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
  • 举个例子,
  • 以汉字“严”为例,它的Unicode是4e25(100 1110 0010 0101),
  • 对应上表,处于第三行,因此严的UTF8编码需要3个字节。
  • 然后,从严的最后一个二进制位开始,从后向前填入X,多出的位补0,
  • 就可以计算出 1110 0100 1011 1000 1010 0101,转成十六进制就是E4B8A5。