历史背景
在Unicode诞生前,世界各国各自制定编码:
- 美国:ASCII,仅128个字符,只能表示英文字母、符号
- 中国:GB2312、GBK,专门存汉字
- 日本:Shift‑JIS;韩国:EUC‑KR
不同编码之间互不兼容,文件跨语言打开就会出现乱码。 1987年,由苹果、施乐等公司发起,1991年发布第一版Unicode标准,目标:为全球所有文字字符分配统一唯一编号,彻底解决多语言乱码。
注意:Unicode ≠ UTF‑8 Unicode是字符集(定义字符编号);UTF‑8/UTF‑16/UTF‑32是编码方案(把编号转为二进制字节存储)。
核心规则
- 码点(Code Point) 每个字符分配一个独一无二整数编号,书写格式:
U+十六进制例:U+4E2D= 汉字「中」;U+1F600= 😀笑脸emoji 码点范围:U+0000 ~ U+10FFFF,一共1 114 112个位置。 - 平面(Plane) 整个码点空间划分17个平面,每个平面65536个码点:
-
第0平面 BMP(基本多文种平面):
U+0000‑U+FFFF,包含大部分常用文字:ASCII、简体繁体汉字、日文韩文、大部分符号。 -
第1‑16平面(辅助平面):
U+10000‑U+10FFFF,存放生僻汉字、古文字、emoji、特殊符号。大于U+FFFF的字符,叫扩展字符,UTF‑16需要用**代理对(Surrogate Pair)**两个16位单元表示。
- 三种主流UTF编码(Unicode的存储实现)
| 编码 | 特点 |
|---|---|
| UTF‑8 | 互联网标准,可变长;ASCII字符占1字节,常用汉字3字节,emoji4字节;向后兼容ASCII |
| UTF‑16 | Windows、Java内部默认;BMP字符2字节,辅助平面4字节;中文一般2字节 |
| UTF‑32 | 固定4字节;每个字符都占4字节,占用空间大,很少用于文件存储 |
关键概念补充
- 码点 ≠ 字符:有些视觉上一个字符,由多个码点组合而成(组合变音符号、部分emoji)。
- 码元(Code Unit):编码方案里最小存储单元。UTF‑8码元是8bit字节;UTF‑16码元是16bit。
一句话总结
Unicode给全世界每个文字符号分配唯一数字ID;UTF系列负责把这个ID翻译成电脑可以保存的二进制字节。
如果你需要,我可以再给你举简单的代码小例子演示码点、UTF‑8之间转换。