历史背景

在Unicode诞生前,世界各国各自制定编码:

  • 美国:ASCII,仅128个字符,只能表示英文字母、符号
  • 中国:GB2312、GBK,专门存汉字
  • 日本:Shift‑JIS;韩国:EUC‑KR

不同编码之间互不兼容,文件跨语言打开就会出现乱码。 1987年,由苹果、施乐等公司发起,1991年发布第一版Unicode标准,目标:为全球所有文字字符分配统一唯一编号,彻底解决多语言乱码。

注意:Unicode ≠ UTF‑8 Unicode是字符集(定义字符编号);UTF‑8/UTF‑16/UTF‑32是编码方案(把编号转为二进制字节存储)

核心规则

  1. 码点(Code Point) 每个字符分配一个独一无二整数编号,书写格式:U+十六进制 例:U+4E2D = 汉字「中」;U+1F600 = 😀笑脸emoji 码点范围:U+0000 ~ U+10FFFF,一共1 114 112个位置。
  2. 平面(Plane) 整个码点空间划分17个平面,每个平面65536个码点:
  • 第0平面 BMP(基本多文种平面)U+0000‑U+FFFF,包含大部分常用文字:ASCII、简体繁体汉字、日文韩文、大部分符号。

  • 第1‑16平面(辅助平面)U+10000‑U+10FFFF,存放生僻汉字、古文字、emoji、特殊符号。

    大于U+FFFF的字符,叫扩展字符,UTF‑16需要用**代理对(Surrogate Pair)**两个16位单元表示。

  1. 三种主流UTF编码(Unicode的存储实现)
编码特点
UTF‑8互联网标准,可变长;ASCII字符占1字节,常用汉字3字节,emoji4字节;向后兼容ASCII
UTF‑16Windows、Java内部默认;BMP字符2字节,辅助平面4字节;中文一般2字节
UTF‑32固定4字节;每个字符都占4字节,占用空间大,很少用于文件存储

关键概念补充

  • 码点 ≠ 字符:有些视觉上一个字符,由多个码点组合而成(组合变音符号、部分emoji)。
  • 码元(Code Unit):编码方案里最小存储单元。UTF‑8码元是8bit字节;UTF‑16码元是16bit。

一句话总结

Unicode给全世界每个文字符号分配唯一数字ID;UTF系列负责把这个ID翻译成电脑可以保存的二进制字节。

如果你需要,我可以再给你举简单的代码小例子演示码点、UTF‑8之间转换。