该复习了做一下本页的 10 秒自测,答对就能把下次复习推后。去自测
01为什么学
没学之前
中文出现乱码,截断后多出半个字,字数统计总是差很多。
学会之后
看懂字节开头的几位,知道一个字符占几个字节。
- 乱码、字数、截断问题自己定位
- 理解「一个汉字算几个 token」这类问题
02图解
图解
03基本单元5 个
- 1 字节0xxxxxxx
- 2 字节110xxxxx 10xxxxxx
- 3 字节1110xxxx 10xxxxxx 10xxxxxx
- 4 字节11110xxx 开头
- 码点U+4E2D
04怎么用
- 首字节以 0 开头1 字节(ASCII);110 开头:2 字节;1110 开头:3 字节;11110 开头:4 字节
- 后续字节一律以 10 开头
- 汉字多数是 3 个字节,emoji 多是 4 个字节
- 截断字节串时要停在字符边界,否则出现乱码
05速查表
| 字符范围 | 字节数 | 例子 |
|---|---|---|
| 英文、数字(ASCII) | 1 | A、1 |
| 拉丁扩展、希腊等 | 2 | é、Ω |
| 汉字、日文、韩文等 | 3 | 中、あ、한 |
| emoji、罕见字 | 4 | 😀、𠮷 |
06动手试试
UTF-8 查看器
07套用一次
「你好」两个汉字 = 6 字节;按字节从中间截断,就会出现乱码「�」。
08常见的坑
按字节截取中文
按字符截取,或把截断位置退到字符边界。
以为字符数等于字节数
数据库字段长度、接口限制可能按字节算。
09自测与练习
先做 10 秒自测,再动手练一下。
一个常用汉字在 UTF-8 里一般占几个字节?
10 分钟小练习
在查看器里输入你的名字,数一下字节数。
看参考答案
中文名通常是 3 字节 × 字数。