1.基础概念
1.1 位/字节
1.1.1 位(bit)
也叫二进制位,值可为 0/1
1.1.2 字节(byte)
- 8个二进制位表示一个字节(
00000000--11111111
) - 可以表示
0-255
之间的任意数字 - 可以用字节表示任何内容(数字,字符,图像等),这取决于如何解析字节
- 字节的最高位位于最左边,最低位在最右边
1.2 码表/编码/解码
1.2.1 码表
电脑编码系统,数值与字符的对应关系(一个字节可换算成数值)
1.2.2 编码
根据码表,将字符换成
1-n
个字节,进行存储
1.2.3 解码
按不同的编码规则,将
1-n
个字节换自成字符
2.字符集
2.1 Ascii 【常用、不通用】
- 计算机最开始支持的基于拉丁字母的编码
- 使用一个字节(
8位
)来表示 - 最高位始终为
0
,剩下的7位表示一个字符(范围为0-127
) 0-31/127
表示控制字符(不可见),32-126
表示可见字符- 缺点:
- 适用于现代英文和其它西欧语言
- 无法支持多种语言
2.2 Latin1/ISO-8859-1【常用、不通用】
- 基于
ASCII
码构建,向下兼容ASCII
- 最高位也参与字符表示(范围为
0-255
) 0-31/127/128-159
表示控制字符(不可见),32-126/160-255
表示可见字符- 缺点:
- 仅扩展支持部分于欧洲使用的语言
- 不支持中文和东亚等国家语言
2.3 Unicode 【常用、通用】
- 表达任意语言的任意字符而设计
- 一个字符代表一个code,不存在二义性
- 只规定了某个字符应该对应哪一个code,未规定编码规则
2.3.1 UTF-8 编码规则 【重点学习】
- 【变长】的
unicode
编码规则 - 用
1-4
个变长的字节表示, 完全兼容
ASCII
编码对于单字节
- 字节的第一位为0,后面7位为这个符号的 Unicode 码( 兼容
ASCII
)
- 字节的第一位为0,后面7位为这个符号的 Unicode 码( 兼容
对于多字节
- 第一个字节的前
n
位1
,表示包含n
个字节,第n+1
位设为0
- 后面的
n-1
个字节的前2
位为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
- 即:如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。
2.3.1 UTF-16 编码规则
- 采集
2/4
个字节表示 0-65535
常用的码点:使用2个字节表示65536+
不常用的码点:使用4个字节表示
2.3.1 UTF-32 编码规则
- 固定使用
4
个字节表示(英文字母也使用4
个字节表示,浪费空间)