Unicode是一个字符集标准,为世界上几乎所有的字符分配了一个唯一的编号,称为码点(Code Point)。
Unicode就像是一个"世界通用字典",给每个字符都分配了一个唯一的编号。
Unicode码点用 U+xxxx 格式表示:
U+0041 = 65(十进制)U+4E2D = 20013(十进制)U+1F600 = 128512(十进制)UTF-8是Unicode的一种编码方式,将Unicode码点转换为字节序列,用于存储和传输。
特点:
| Unicode范围 | 十进制范围 | 字节数 | UTF-8格式 | 数据位数 | 示例 |
|---|---|---|---|---|---|
U+0000 ~ U+007F |
0 ~ 127 | 1字节 | 0xxxxxxx |
7位 | A, B, C... |
U+0080 ~ U+07FF |
128 ~ 2047 | 2字节 | 110xxxxx 10xxxxxx |
11位 | 拉丁字母扩展 |
U+0800 ~ U+FFFF |
2048 ~ 65535 | 3字节 | 1110xxxx 10xxxxxx 10xxxxxx |
16位 | 中文、日文、韩文 |
U+10000 ~ U+10FFFF |
65536 ~ 1114111 | 4字节 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
21位 | Emoji表情 |
首字节标识:通过首字节的前几位判断字节数
0xxxxxxx:1字节(ASCII)110xxxxx:2字节的首字节1110xxxx:3字节的首字节11110xxx:4字节的首字节后续字节标识:所有后续字节都以 10 开头
数据位填充:x 表示实际数据位
位运算是UTF-8编码实现的核心技术。
| 运算符 | 说明 | 示例 | 作用 |
|---|---|---|---|
>> |
右移(取高位) | 0x4E2D >> 12 |
向右移动12位 |
<< |
左移(放大) | 0x4 << 12 |
向左移动12位 |
& |
按位与(提取) | 0x4E2D & 0x3F |
提取特定位 |
| |
按位或(组合) | 0xE0 | 0x4 |
组合数据 |
encode()/decode() 方法最简单