Unicode

义项:字符编码标准
Unicode

Unicode 是计算机中用于表示和处理文本的通用字符编码标准,为世界上绝大多数书写系统的字符分配唯一编号,使同一份文本在不同平台、程序与语言环境下能够得到一致的解读。该标准由非营利组织 Unicode 联盟维护,与 ISO/IEC 10646 保持字符与码位一致;2013 年后,UTF-8 逐渐成为万维网最主要的字符编码,Unicode 也成为现代操作系统与互联网协议的基础。

目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

Unicode 是一套编码字符集标准,其核心是为每个字符指定一个唯一的码位(code point)。码位取值范围从 U+0000 到 U+10FFFF,书写时通常在十六进制数前加“U+”前缀,例如汉字“严”的码位是 U+4E25[1]。字符集与字符编码是两个层次:前者规定字符与编号的对应关系,后者规定这些编号如何落成内存或文件中的字节序列[1]。

Unicode 与国际标准 ISO/IEC 10646 完全兼容,两者包含相同的字符和码位,符合 Unicode 的实现同时符合 ISO/IEC 10646[2]。相比之下,Unicode 标准还给出字符属性、算法与实现层面的更多说明[2]。

标准由 Unicode 联盟 维护,该组织为制定和推广这一标准而设立,技术决策由统一码技术委员会负责[3]。联盟与 ISO、国际电工委员会等标准机构保持联络,新增字符须经双方认可后方可正式分配[3]。

原理

Unicode 把全部码位空间划分为 17 个平面,每个平面包含 65536 个码位,合计 1114112 个可编码位置[2]。第 0 平面称为基本多文种平面(BMP),收录了绝大多数常用字符;其余 16 个为辅助平面,用于较生僻的文字、历史文字和专门符号[1]。其中一部分区间被保留:U+D800 至 U+DFFF 的 2048 个码位专供代理机制使用,不会被分配给字符[4]。

码位本身只是抽象编号,写入存储时需按编码形式转换。UTF-8 以字节为单位、长度可变,码位 0 至 0x7F 用 1 个字节表示,与 ASCII 完全重合,因此 ASCII 文本本身就是合法的 UTF-8 文本[4]。UTF-16 以 16 位码元为单位,BMP 内字符占 1 个码元,辅助平面字符则拆成高低两个代理码元组成代理对[4]。UTF-32 每个字符固定占 32 位,结构最简单但占用空间最大[4]。

同一段文字可以有多种码位表示。带重音的字母既可写成预组合字符,也可写成基本字母加组合附加符号,例如 U+00C4 等价于 U+0041 后接 U+0308[5]。为此标准定义了规范分解与规范合成算法,NFC、NFD、NFKC、NFKD 四种规范化形式规定如何把等价序列统一为同一种形式[6]。其中兼容形式 KC、KD 还会抹平半角与全角假名、罗马数字与对应字母之间的差异,使用时需谨慎[7]。

字符顺序还可通过变体选择符加以区分。标准为部分表意文字定义了标准化变体序列,以统一汉字加变体选择符的形式表达特定字形,这类序列不受规范化影响[8]。

发展历程

1987 年底,来自施乐与苹果的工程师乔·贝克尔、李·柯林斯和马克·戴维斯在讨论中启动了 Unicode 项目;1988 年初完成了定宽与混宽文本访问比较、双字节文本存储需求以及世界各字母表字符数量三项调查,据此确定了基本架构[9]。名称取自 universal、uniform、unique 三个目标[9]。1988 年秋,柯林斯着手建立字符数据库,最初的设计按文字系统字母排序并排除组合字符[9]。

1989 年初,工作组扩展到多家公司参与;同年年中,为贴近既有标准,Unicode 吸收了 ISO 的全部预组合字符,并引入可逆往返映射[9]。1990 年微软人员加入,开始编制与其他编码标准的映射表[9]。与此同时,国际标准化组织 自 1984 年起推进通用字符集 ISO/IEC 10646 的制定,两套方案目标相近[3]。

1991 年 1 月,Unicode 联盟成立,同年 10 月发布 Unicode 标准 1.0 版[3]。经过协商,Unicode 与 ISO/IEC 10646 的字符集实现对齐,并约定此后保持同步;ISO/IEC 10646 于 1993 年正式颁布[10]。此后标准按年度节奏更新,字符总数持续增长:15.0 版于 2022 年 9 月发布,收录 149186 个字符、覆盖 161 种文字[11]。

17.0 版于 2025 年 9 月 9 日发布,新增 4803 个字符,总数达 159801 个,文字系统增至 172 种,新增贝里亚·埃尔菲文、托隆西基文、泰哟文和西代提克文,并新设 CJK 统一表意文字扩展 J 区块收录 4298 个汉字,使已编码的 CJK 表意文字超过 10 万个[12]。

应用

Unicode 是网页与操作系统文本处理的基础。HTML、XML 等 Web 技术以 Unicode 作为字符模型,主流浏览器与应用均予以支持[1]。在编程语言层面,Java 的字符与字符串类型基于 Unicode 码位实现,其 JDK 随之逐版更新到新版本的数据文件[13]。

在数据交换场景中,系统内部可以沿用各自的本地编码,只在跨系统传输时转换为 Unicode,以避免多语言混排时的乱码与信息丢失[2]。常用符号与表情符号同样通过标准分配码位,例如 17.0 版新增的沙特里亚尔符号,即为配合沙特中央银行公布的货币符号而编码[12]。

字体与排版依赖码位到字形的映射。当字符缺少对应字体时,系统通常回退到替代字形,Unicode 联盟亦维护最后手段字体项目以供此类情形参考[14]。

局限

Unicode 只规定抽象字符,不规定具体字形。同一个码位在不同字体中可以有不同写法,地区性的字形差异需要依靠字体或变体机制表达;标准化变体正是为区分这类字形差异而设[8]。对于日本 JIS X 0213 中的部分汉字,规范化过程会把兼容表意文字永久归并为统一汉字,原有的字形区分随之消失[8]。

字符统一本身也带来取舍。CJK 统一表意文字按抽象字形合并不同地区的汉字,只在差异属于纯显示字形时归并,同一来源标准中原本分列的字仍保留独立码位[15]。这意味着合并后的字符无法单凭码位还原各地区原本的写法习惯。

等价表示的存在使字符串比较复杂化。同一字符的预组合形式与组合序列在码位上并不相同,逐位比较可能判定为不相等,需要先规范化或采用感知等价性的匹配策略[6]。兼容规范化形式还会抹去半角与全角、罗马数字与字母等格式差别,若不加区分地施加于任意文本,可能丢失对语义有用的信息,并妨碍与旧编码之间的往返转换[7]。

编码方式的选择同样影响互操作。UTF-16 与 UTF-32 存在大端、小端两种字节序,实际传输时需借助字节序标记或外部声明确定顺序,UTF-16 与 UTF-32 的名称在指编码形式还是指字节序列时含义并不相同[4]。

参见

  • UTF-8 —— Unicode 的可变长度字节编码形式,兼容 ASCII,广泛用于网页与文件存储。

  • UTF-16 —— 以 16 位码元为单位的 Unicode 编码形式,辅助平面字符使用代理对表示。

  • ISO/IEC 10646 —— 与 Unicode 字符和码位保持一致的通用字符集国际标准。

  • Unicode 联盟 —— 制定并维护 Unicode 标准的非营利组织。

  • 码位 —— 编码字符集中为每个字符分配的唯一编号。

  • 字符编码 —— 规定字符与字节序列对应关系的方案。

参考资料

  1. 字符编码:核心概念 [引用日期2026-10-29]
  2. Unicode 概述 [引用日期2026-10-29]
  3. page.php?id=wsi_guidelines_sec_6_2&site_id=nrsi [引用日期2026-10-29]
  4. Unicode Basics [引用日期2026-10-29]
  5. unicode(7) — manpages — Debian buster-backports [引用日期2026-10-29]
  6. CharmodNormSummary: Difference between revisions [引用日期2026-10-29]
  7. [sc34wg3] Re: SAM issue: string-normalization [引用日期2026-10-29]
  8. CJK Type Blog [引用日期2026-10-29]
  9. Summary Narrative [引用日期2026-10-29]
  10. Appendix C [引用日期2026-10-29]
  11. Announcing The Unicode® Standard, Version 15.0 [引用日期2026-10-29]
  12. Unicode 17.0 Release Announcement [引用日期2026-10-29]
  13. [#JDK-8367272] Update Unicode Data Files to 17.0.0 [引用日期2026-10-29]
  14. n2824-UnicodeActivityReport(PDF) [引用日期2026-10-29]
  15. デジタル・ドキュメント 12-3 [引用日期2026-10-29]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-28T18:50:53Z

历史版本

本条目引用的词条
ISO/IEC 10646 Unicode 联盟 国际标准化组织 UTF-8 UTF-16 码位 字符编码