一句话定义:UTF-8 是把 Unicode 字符变成字节的变长编码规则;字符编码则是“字符与字节如何对应”的整套约定。
计算机只存字节。文本要保存或传输,必须把字符翻译成字节,读回时再翻译。Unicode 给每个字符编号,叫码点(code point),如“你”是 U+4F60。UTF-8 规定这个码点写成哪几个字节:ASCII 字符 1 字节,常见汉字 3 字节,emoji 或生僻字 4 字节。所以“你好”在 UTF-8 下是 6 字节。打个比方:Unicode 像身份证号,UTF-8 像快递包装规格,不同货物用不同大小的箱子。
乱码就是编码和解码用了两套规则。发送方按 UTF-8 写,接收方按 GBK 读,字节还是那些字节,拼出来的字却错了。不是文件坏了,是翻译错了。
要区分几个概念:
| 概念 | 解决什么 | “你”的例子 |
|---|---|---|
| Unicode | 给字符编号 | U+4F60 |
| UTF-8 | 把码点写成字节 | E4 BD A0,3 字节 |
| AI 词典:Token">Token | 模型词表切分单位 | 可能 1 个,也可能拆成多个 |
一个汉字算几个 token?根源不在 UTF-8,而在 tokenizer(分词器)的切分算法和词表。现代大模型常用 BPE(Byte Pair Encoding,字节对编码)或 SentencePiece 之类:先把文本转成字节或字符,再按词表合并常见片段。常见汉字若在词表里,可能 1 字 1 token;生僻字、emoji、混杂符号可能被拆成 2 个以上 token;有些词如“人工智能”也可能整体成 1 个 token。因此 UTF-8 只决定“占几个字节”,token 数由具体模型的 tokenizer 决定,以官方页面或分词工具为准。
对从业者和普通人的实际意义:做接口、数据库、日志,统一用 UTF-8,能减少乱码;估算长度时,别把字符数、字节数、token 数混为一谈;做 AI 应用时,token 直接影响上下文窗口、截断和费用,中文通常比英文更“占 token”,需要留余量。
