编码解码哈希加密格式化时间转换开发生成文本处理网络工具其他工具
首页 / 名词解释 / Unicode

Unicode

Unicode(万国码、统一码)是一套字符编码标准,目标是给世界上所有文字系统里的每个字符分配一个全局唯一的编号,这个编号叫「码点」(code point),写作 U+十六进制的形式,例如 U+0041AU+4E2D 是「中」。它取代了 ASCII、GBK、Shift_JIS 等各自为政的本地编码,让不同语言的文字能在同一份文本里无冲突地共存。

关键在于:Unicode 只规定「字符 ↔ 码点」的对应关系,并不直接规定码点如何存成字节。把码点落地成字节,需要一种具体的「编码形式」:

常见误区:Unicode ≠ UTF-8,前者是字符集标准,后者只是把码点编成字节的方案之一,说「用 Unicode 编码」并不严谨。另外,一个「看起来的字符」可能由多个码点组合而成(带音标的字母、emoji 加肤色修饰等),因此按码点数、字节数、显示字素来统计长度,结果可能都不一样。

常见问题

Unicode 和 UTF-8 是一回事吗?
不是。Unicode 是字符集标准,规定每个字符对应哪个码点(编号表);UTF-8 是把码点编码成字节的具体方案之一(存储/传输格式)。同一份 Unicode 文本可以用 UTF-8、UTF-16 或 UTF-32 编码成不同的字节。
为什么有的 emoji 或字符算出来的「长度」不对?
因为一个可见字符可能由多个码点组成,比如 emoji 加肤色修饰符、字母加组合音标。按 UTF-16 码元、码点数、还是字素簇(grapheme)统计,结果都不同。例如 JS 的 .length 数的是 UTF-16 码元,而不是人眼看到的字符个数。
U+4E2D 里的数字是十六进制吗?
是。U+ 后面跟的是码点的十六进制值,U+4E2D 对应十进制 20013,即汉字「中」。习惯上至少写 4 位,不足补零;超出基本多文种平面(BMP)的字符会更长,如 emoji 「😀」是 U+1F600。

相关工具

相关名词