字节数据 字符编码
时间:2018-12-25 16:01:20
参考:
字符编码¶
ASCII 编码¶
使用 8bit 表示范围从 00000000~11111111 可以表示 256 种字符,标准ASCII码定义了 128 个字符,从 00000000~01111111。
字符组成:
```
[0,32]: 不可见字符(回车、换行和制表符)
[33,47]: [! " # $ % & ' ( ) * + , - . /]
[48,57]: [0 1 2 3 4 5 6 7 8 9]
[58,64]: [: ; < = > ? @]
[65,90]: [A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]
[91,96]: [[ \ ] ^ _ `]
[97,122]: [a b c d e f g h i j k l m n o p q r s t u v w x y z]
[123,128]: [{ | } ~ ]
```
Unicode 编码¶
全称:Universal Multiple-Octet Coded Character Set。 简称 UCS。
ASCII 编码最多只能表示256个字符,[0~128]是固定的编码,[129~256] 在不同的国家可能对应不同的编码。
汉字一种语言有几万个字,为了使所有国家的每一个字都对应一个编码,就出现了 Unicode 编码。Unicode 编码 用4个字节表示一个字符。Unicode 规范了怎么用编码表示字符。
Unicode 编码存在的一个问题:
- 用几个字节存储字符,没有统一规定。
- 表示 abc 这些字符需要3个字节,比ASCII多出了3倍的空间。
对于上面的原因就出现了几种 Unicode 的规范,比如 UTF-8、UTF-32 等。
UTF-8 编码¶
UTF:全称:UCS Transformation Format。定义了编码怎么传输。
使用可变长度(1~4个字节)编码表示不同符号,编码规则如下:
-
对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。
-
对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。
如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。
```
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\
```