什么是 Unicode:完整指南、用途和编码

最后更新: 20月2025
  • Unicode 为每个字符分配一个唯一的代码点,并将其内容与 ISO/IEC 10646 同步。
  • UTF-8、UTF-16 和 UTF-32 对相同的字符进行编码并允许无损转换。
  • 规范化、Bidi 和 UCD 属性可确保一致的比较、排序和渲染。
  • 采用 Unicode(最好在网络上采用 UTF-8)可防止损坏并促进国际化。

关于 Unicode 的通用说明

Unicode 是计算机处理文本时使用的通用语言:它为几乎任何书写系统中的每个字符和符号分配一个唯一的数字,以便可以在平台和国家之间无缝地存储、处理和共享文本。

该标准的出现是为了克服旧字符集(ASCII 集、代码页、EBCDIC 等)的局限性,这些字符集要么功能不足,要么彼此不兼容。如今,该标准与 ISO/IEC 10646 同步,维护算法(例如双向算法),并定义属性和规范化规则,以确保一切运行一致。

什么是 Unicode 以及它为什么如此重要?

Unicode 是一种通用且不断发展的字符编码标准,它用名称、代码点和一组属性(脚本、类别、方向性、大小写等)来描述每个字符。Unicode联盟内的 Unicode 技术委员会 (UTC) 负责使其与 ISO/IEC 10646 标准保持同步

其目标是通用性、统一性和独特性:一个涵盖广泛领域的库,能够实现多语言文本的无歧义交换,并遵循清晰且可复现的规则。正因如此,现代技术(操作系统、浏览器、XML、Java、数据库)才能在同一文档中混合使用拉丁字母和阿拉伯字母、中日韩汉字、表情符号以及技术或音乐符号

字符、字形和代码点

在Unicode中,字符是信息的抽象单元,代码点是它的数值标识符字形是字符的视觉形式(屏幕上显示的内容),它取决于字体。一个字符可以有多个字形,有时一个字形也可以代表多个字符。

代码点的常用表示方法是十六进制的 U+XXXX。分析材料中的一些示例:小写字母“l”是 U+006C,预组合小写字母“ü”是 U+00FC,“é”是 U+00E9,希腊字母 beta:大写为 U+0392,小写为 U+03B2(在某些文本中,“β”被引用为 U+0392,但该代码对应于大写字母“Β”)。

Unicode 代码空间有 1.114.112 个可能的位置(最高到 U+10FFFF),其组织方式旨在涵盖和分类所有书写系统和符号,每个版本都有数万个有效且不断增长的分配。

规划、区域和街区

Unicode 将其字符空间划分为 17 个平面,每个平面最多可容纳 65.536 个代码点。这种划分方式便于对相关的文字和符号进行分组,并快速找到所需内容。

最相关的平面:基本多语平面(BMP,平面 0)汇集了几乎所有现代字母和许多符号;补充多语平面(SMP,平面 1)存储历史文字和技术符号(例如,音乐和数学符号);补充表意文字平面(SIP,平面 2)扩展了中日韩表意文字;平面 14(SSP)包含特殊标签;平面 15 和 16 供私人使用。

区块和区域:地图非正式地划分为区域,正式地划分为相邻的区块。区块用于统计和记录字符,尽管它们并不总是与有意义的语言分组相对应。

  远程办公对工作和个人健康的 15 大好处

CJK 表意文字和 Unihan 项目

东亚(汉字)表意文字在Unicode中统一,虽因地区而异形,但都指代同一个抽象概念。其管理由表意文字报告小组(IRG)负责,该小组是ISO/IEC JTC1/SC2/WG2的成员,成员来自中国、日本、韩国、越南、香港、澳门、新加坡、美国等国家和地区。

Unihan 数据库汇集了处理不同语言中的这些表意符号以及历史或企业标准所必需的辅助信息(读音、含义、等效词)。

主要中日韩词汇块和扩展

  • 中日韩统一表意文字(BMP,U+4E00–U+9FFF):20.992个常用字符。
  • 扩展 A(BMP,U+3400-U+4DBF):6.592 个不太常见的表意文字。
  • B–H延伸:在 SMP/SIP/TIP 中,它们加起来有数万个(B:U+20000–U+2A6DF,42.720;C:U+2A700–U+2B73F,4.154;D:U+2B740–U+2B81F,222;E:U+2B820–U+2CEAF,5.762;F:U+2CEB0–U+2EBEF,7.473;G:U+30000–U+3134F,4.939;
  • 其他相关 CJK 区块:康熙部首(U+2F00–U+2FDF)、CJK符号和标点符号(U+3000–U+303F)、兼容性和兼容格式、兼容性表意文字补充等。

Unicode 预计表意符号的纳入不会有绝对的结束,并考虑了诸如表意描述序列之类的机制,通过将未编码的符号分解为现有组成部分来表示它们(但要注意:没有规范的分解,也无法保证搜索或排序等操作的准确性)。

编码形式:UTF-8、UTF-16 和 UTF-32

Unicode 定义了转换形式 (UTF),将代码点转换为存储单元,以便软件能够根据上下文高效地处理文本。

UTF-8是一种可变长度、面向字节的编码格式,它在 U+0000 到 U+007F 的范围内与 ASCII 兼容,每个字符使用一个字节。目前的标准是每个字符使用 1 到 4 个字节;一些较早的文献提到过 1 到 6 个字节,但在现代 Unicode 中是 1 到 4 个字节。它是网络上的主流编码格式。

UTF-16使用 16 位单位

(每个字符一个或两个代码单元):大多数 BMP 字符适合一个单元;补充字符使用 U+D800–U+DFFF 范围内的代理对。

UTF-32是固定长度的编码:每个字符 4 个字节,简单但占用空间大;当直接字符索引很重要且内存不是问题时,它非常有用。

UTF-8 中的位分布

UTF-8 格式将代码点位分成 1 到 4 个字节的序列,并带有可识别的头部,这样可以避免歧义,并便于检测字符边界。

Unicode 范围 位模式 字节
U+0000..U+007F 0xxxxxx 1
U+0080..U+07FF 110yyyyy 10xxxxxx 2
U+0800..U+FFFF 1110zzzz 10yyyyyy 10xxxxxx 3
U+010000..U+10FFFF 11110uuu 10uuuzzzz 10yyyyyy 10xxxxxx 4

UTF-8 的一个主要优点是它避免了字节序(字节序)问题,并允许高效地处理文本流,此外还向后兼容 ASCII。

编码方案、字节顺序和 BOM

除了 UTF 格式之外,Unicode 还描述了序列化方案,这些方案解决了如何在具有不同字节序的系统之间传输字节,以及如何指示字节顺序等方面的问题。

  • UTF-8:字节顺序不适用。它可以携带 字节顺序标记 (BOM)作为提示,尽管默认情况下它不是必需的或推荐的。
  • UTF-16:BE/LE(大/小端)变体和可选的 BOM(如果缺失且协议未定义,则假定为大端)。
  • UTF-32:具有类似规则的 BE/LE 变体;允许使用 BOM 作为订单标记。
  计算机组件:完整硬件指南

此外,还有一些特定的变体,例如 UTF-16BE/UTF-16LE 和 UTF-32BE/UTF-32LE(按照惯例没有 BOM),以及其他历史兼容编码,例如 UTF-7 或 UTF-EBCDIC,此外还有 GB18030(相当于 UTF-8 的中文编码,支持简体中文和繁体中文)。

规范化、组合和等价性

许多汉字可以用预组合形式或由基本符号和组合符号组成的序列来表示。修订材料中的经典例子:预组合形式的“Ä”是U+00C4,而分解形式是“A”(U+0041)+分音符(U+0308)。越南语“ỗ”可以表示为“o”(U+006F)+抑扬符(U+0302)+波浪号(U+0303)。

Unicode 定义了标准化的字符串形式和两种等效性:规范等效性(内容完全相同)和兼容性等效性(形式可能相同但语义不同)。标准化确保了字符串比较的可靠性并减少了重复

双向算法和特殊字符

对于从右到左的文字,例如阿拉伯语或希伯来语,Unicode 采用了一种标准化的、不断发展的双向算法(Bidi)(例如,6.3 版本中的修订),以便将拉丁语和阿拉伯语混合文本以正确的视觉顺序表示。

根据接收到的材料,应该了解以下代码点类别:图形字符(字母、符号、标记)、格式(影响处理的不可见字符:U+2028 换行符、U+2029 段落符、U+00A0 硬空格)、用于兼容性的继承控制代码(范围 U+0000–U+001F、U+007F、U+0080–U+009F)、私有用途、保留位置、替代字符(UTF-16 的 U+D800–U+DFFF)和非字符(每个平面中的 U+FFFE、U+FFFF)。

Unicode、ISO/IEC 10646 和其他标准(ASCII、ANSI、代码页)

Unicode 与 ISO/IEC 10646 (UCS) 同步,并保留了与先前标准(ASCII、ISO 8859-1、ANSI Z39.64、JIS X 0208、KS X 1001、GB 2312、GB 18030、HKSCS、CNS 11643 等)的映射关系,此外还为制造商保留了私人使用的空间。

ASCII 与 UnicodeASCII 是一种 7 位字符集,包含 128 个字符,足以满足基本的英语需求,但对于带有变音符号、表意符号或表情符号的语言来说则不够用。Unicode 涵盖超过 14 万个字符,并且还在不断增长,采用 UTF-12 格式的 8/16/32 位编码。

ANSI 和代码页:“ANSI”通常指的是有限的、彼此不兼容的 8 位 Windows 代码页。例如,运行 OEM-Latin II 的计算机打开 IBM EBCDIC-Cyrillic 格式的文本时,会显示错误的字符。Unicode 通过单一字符集及其自身格式之间的无损转换解决了这个问题。

系统(Windows、Solaris)上的实施和转换

Windows 内部在其现代 API 中使用 UTF-16 编码,并提供诸如MultiByteToWideCharWideCharToMultiByte等功能,用于在 Unicode 和代码页(SBCS/DBCS/MBCS)之间进行转换。如果必须转换为代码页,而该代码页无法表示所有字符,则可能会丢失数据。

Windows 上的新应用程序应在内部使用 UTF-16 编码,并将编码转换留给外部处理(例如 I/O 和协议),以最大程度地减少数据损坏。即便如此,Windows 在不可避免的情况下仍会保持与旧代码页的兼容性

根据修订后的文档,Oracle Solaris 11在系统级别支持 Unicode 6.0 和 ISO/IEC 10646:2011,在其参数集中使用 UTF-8 作为默认格式,这样可以避免字节顺序问题并透明地保留 ASCII。

Unicode 实践:Web、文档和编程

在网络上,通常使用 UTF-8 编码来提供和存储内容。在 HTML 中,声明“<meta charset="UTF-8">”以确保兼容性,并在必要时使用十六进制数字实体(例如:欧元符号“&#x20AC;”)。

  完整的电脑组装分步指南

在 Word 中,您可以通过以下方式轻松插入 Unicode 符号:将光标放在符号上,选择“插入”>“符号”,或者键入代码并按 Alt+X;这将按照标准流程将值转换为相应的字符。另请参阅用于从键盘插入符号的Alt 代码列表。

在编程语言中:Python 3 中字符串已经是 Unicode 编码;Java 和 C# 中可以使用转义字符 '\uXXXX';HTML 中可以使用 '&#xXXXX;'。重要的是,编辑、编译和传输过程必须使用相同的编码,以避免错误。

如果整个字符串都采用 Unicode 编码,则复制粘贴符号可以正常工作。但如果字符串的某些部分使用了不同的编码,则可能会出现问号、方框或其他奇怪的符号。

字符数据库(UCD)、属性和类别

Unicode字符数据库(UCD)为每个代码点发布其名称、类别、脚本、大小写属性、方向性以及其他特征。这些信息对于渲染引擎和文本处理的正常运行至关重要。

由于这些特性,不同的组件和算法(如排序、分词或大小写转换)可以对相同的数据表现出一致的行为。

标准的版本和扩展:亮点

Unicode 随着每个版本的发布而不断发展,不断纳入新的文字、符号和表情符号。重要的里程碑包括 1991 年发布的 1.0 版本,该版本包含 7.161 个字符,以及随后的扩展,这些扩展增加了数千个新的符号、表意文字、表情符号和文字。

例如,2022 年,15.0 版本增加了 4.192 个 CJK 表意文字和其他元素,达到约149.186 个字符

探索 Unicode 表的工具

有一些免费的工具可以用来搜索和分析字符:Unibook Character Browser、SYMBL 和 Branah.com 允许您查询属性、名称和字符块,使开发人员和内容创建者更容易快速找到他们需要的信息。

用例:地址表单、国际化和业务

允许用户使用自己的语言和文字输入地址有助于减少错误并改善用户体验。此外,Unicode 互操作性可防止不同系统之间的转换问题,从而在整个数字链中保持文本完整性。

因此,Unicode 是确保文本在整个数字基础设施(从网页表单到数据库系统和打印文档)中保持最终状态的基本要素,无论你在同一句话中使用“ñ”、阿拉伯语、中文还是表情符号。

二进制编号
相关文章:
二进制数字:计算机的秘密语言