一、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。