WebTool

编码系列 · 第 1 章

字符编码简史:ASCII、Unicode、UTF-8 与中文乱码的根源

WebTool 团队 · 发布于 2026-09-08 · 编码 / UTF-8 / Unicode / 乱码

Unicode 给每个字符一个唯一编号(码点),UTF-8 是把编号变成字节的一种编码方式。「锟斤拷」「」等乱码的共同根源只有一个:写入时用的编码和读取时用的编码不一致。 本站提供 Unicode 编码转换工具

三段简史

阶段 方案 能力 局限
1963 ASCII 128 个字符,7 bit 只有英文
各国自救 GBK(中)/ Shift-JIS(日)等 本地语言 互不兼容,同一字节含义不同
1991 至今 Unicode + UTF-8 全球字符统一编号 需要全世界都遵守

字符集 ≠ 编码

  • Unicode 是字符集:规定「中」= U+4E2D,「😀」= U+1F600,只是一个编号表。
  • UTF-8 是编码:规定编号怎么变成字节——ASCII 字符 1 字节,常用汉字 3 字节,Emoji 4 字节。变长设计让 ASCII 文本零成本兼容。
  • UTF-16、UTF-32 是另外两种编码,分别用 2/4 字节的定长基本单元。今天默认选 UTF-8

乱码是怎么产生的

写入:「中」--UTF-8--> E4 B8 AD(3 字节)
读取:E4 B8 AD --按 GBK 解读--> 涓(乱码)

三个字节的 UTF-8 汉字被按两字节一组的 GBK 切开,就得到经典乱码「涓」。而「锟斤拷」则来自 Unicode 替换字符 U+FFFD 的二次转码。

排查乱码的三板斧

  1. 先确认实际字节:用十六进制查看器看文件真实字节,别信编辑器显示的「当前编码」。
  2. 确认声明与实际一致:HTML 的 <meta charset>、HTTP 的 Content-Type、数据库的表字符集,声明的是 A 而实际写的是 B,必然乱码。
  3. 统一为 UTF-8:新项目全链路(文件、数据库、HTTP、代码默认编码)统一 UTF-8,可以消灭 99% 的乱码问题。

最后更新:2026-09-08