Unicode

目录

基础

产生背景:

主要特点:

编码方式:

作用和意义:

进阶

Unicode 的发展历程

Unicode 的编码方式

Unicode 的实现方式

Unicode 的作用

Unicode 的学名

专业术语

一、码点(Code Point)

二、补充码(Supplementary Code)

三、码元(Code Unit)

四、平面(Plane)

五、字符属性(Character Properties)

六、正规化(Normalization)

七、字形(Glyph)

八、字符编码方案(Character Encoding Scheme)

九、字符集(Character Set)

十、双向文本(Bidirectional Text)

十一、字符名称(Character Name)

十二、字符范围(Character Range)

十三、字符映射(Character Mapping)

十四、字符集版本(Character Set Version)

十五、字符集注册(Character Set Registration)


基础

Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准。以下是关于它的详细介绍:
  1. 产生背景

    • 在 Unicode 出现之前,世界上存在着数百种不同的字符编码方案,每种编码方案都只适用于特定的语言或地区,这导致了信息在不同系统和平台之间传输时经常出现乱码或无法正确显示的问题。例如,欧洲常用的 ISO-8859 编码、日本的 Shift-JIS 编码、中国的 Big-5 编码等,它们之间互不兼容。为了解决这种混乱的局面,Unicode 应运而生。
  2. 主要特点

    • 支持多种语言文字:Unicode 可以支持几乎世界上所有国家和地区的语言文字,包括中文、英文、法文、德文、日文、阿拉伯文等,极大地方便了全球范围内的信息交流和文本处理。
    • 统一的编码方式:为每种语言中的每个字符设定了统一并且唯一的二进制编码,无论在任何计算机系统和应用程序中,同一个字符都具有相同的编码,这使得在不同的系统之间进行数据交换和共享变得更加容易和可靠。
    • 支持多种字符集:包含基本多语言文字字符集、扩展多语言文字字符集等,不同的国家和地区可以根据自己的需要选择适合自己的字符集。
    • 可扩展性:虽然 Unicode 目前已经定义了大量的字符,但它仍然具有很强的可扩展性,能够通过添加新的码点来支持未来可能出现的新的语言文字或符号。
    • 广泛的应用领域:已经被广泛应用于操作系统、浏览器、办公软件、输入法、游戏等各种领域,几乎所有涉及文本处理的软件和系统都需要支持 Unicode 编码。
  3. 编码方式

    • UTF-8:是一种可变长度的编码方式,使用 1 到 4 个字节来表示一个字符。对于 ASCII 字符(即 0x00-0x7F 之间的字符),UTF-8 编码与 ASCII 编码完全相同,只占用 1 个字节;对于其他字符,根据其 Unicode 码点的大小,使用不同数量的字节进行编码。UTF-8 编码的优点是兼容性好,占用空间相对较小,是互联网上最常用的 Unicode 编码方式。
    • UTF-16:以 16 位无符号整数为单位进行编码。对于 Unicode 码点小于 0x10000 的字符,直接用一个 16 位的整数表示;对于码点大于等于 0x10000 的字符,则使用两个 16 位的整数来表示,这种编码方式在处理一些复杂的文字系统(如中文、日文、韩文等)时比较常用1。
    • UTF-32:使用 32 位无符号整数为单位进行编码,每个字符都占用 4 个字节。这种编码方式的优点是简单直接,方便进行字符的定位和操作,但占用的存储空间较大,一般在对存储和处理速度要求较高的场景下使用。
  4. 作用和意义

    • 在全球化的信息时代,Unicode 为不同语言和文化之间的交流提供了基础,使得人们可以在计算机上方便地使用自己的母语进行信息的输入、存储、传输和处理2。
    • 对于软件开发和互联网应用来说,Unicode 保证了文本信息的正确显示和传输,避免了因字符编码不统一而导致的乱码问题,提高了软件的兼容性和可扩展性。
    • 在学术研究、文化传承等方面,Unicode 也为数字化处理和保存各种语言文字的文献、资料提供了便利,有助于保护和传承人类的文化遗产。

进阶

Unicode,也被称为统一码、万国码、单一码,是计算机科学领域里的一项业界标准。它由统一码联盟开发,1990 年开始研发,1994 年正式发布 1.0 版本,截至 2023 年 12 月 12 日已发布 15.1.0 版本,共收录 149813 个字符
Unicode 的中文翻译为统一码,简单来看,它就是一个数字,每一个数字对应一个字符的编码,这个字符囊括了整个世界使用的全部语言和符号的字符,从根本上来说,它是一个映射表,一个从数字到文字的映射。
Unicode 编码系统可分为编码方式实现方式两个层次。编码方式与 ISO 10646 的通用字符集(UCS)概念相对应,目前实际应用的 Unicode 版本对应于 UCS-2,使用 16 位的编码空间,即每个字符占用 2 个字节,最多可以表示 65536 个字符,基本满足各种语言的使用。实际上目前版本的 Unicode 尚未填充满这 16 位编码,保留了大量空间作为特殊使用或将来扩展。上述 16 位 Unicode 字符构成基本多文种平面(BMP)。最新的 Unicode 版本定义了 16 个辅助平面,两者合起来至少需要占据 21 位的编码空间,比 3 字节略少。但事实上辅助平面字符仍然占用 4 字节编码空间,与 UCS-4 保持一致。未来版本会扩充到 ISO 10646-1 实现级别 3,即涵盖 UCS-4 的所有字符。
Unicode 为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。如果把各种文字编码形容为各地的方言,那么 Unicode 就是世界各国合作开发的一种语言。在这种语言环境下,不会再有语言的编码冲突,在同屏下,可以显示任何语言的内容。
Unicode 的学名是 “Universal Multiple-Octet Coded Character Set”,简称为 UCS。现在用的是 UCS-2,即 2 个字节编码,而 UCS-4 是为了防止将来 2 个字节不够用才开发的。

Unicode 的发展历程

在计算机科学的发展历程中,不同国家和地区有着各自的字符编码方案。然而,这些编码方式存在着不兼容、冲突等问题。为了解决这些问题,Unicode 应运而生。

1984 年,国际标准化组织(ISO)创建了通用字符集(UCS),即 ISO 10646 标准所定义的标准字符集。1988 年,由 Xerox、Apple 等软件制造商组成的统一码联盟开始着手制定 Unicode。1991 年前后,Unicode 团队和 UCS 团队认识到世界不需要两个不兼容的字符集,于是开始合并双方的工作成果,并为创立一个单一编码表而协同工作。

UCS 的开发进度快于 Unicode,1990 年就公布了第一套编码方法 UCS - 2,使用 2 个字节表示已经有码点的字符。在 ISO 制定 UCS 的同时,Unicode 也在不断发展。Unicode 源于一个简单的想法:将全世界所有的字符包含在一个集合里,计算机只要支持这一个字符集,就能显示所有的字符,再也不会有乱码了。

Unicode 的编码方式

Unicode 的编码方式主要有 UTF - 8、UTF - 16、UTF - 32 等。

UTF - 8 是互联网上最常用的 Unicode 编码方式,它使用 1 到 4 个字节来表示一个字符。对于码点在 0x00 ~ 0x7F 的字符,UTF - 8 与 ASCII 编码相同,占用 1 个字节。对于其他字符,根据字符的码点范围,使用不同数量的字节进行编码。

UTF - 16 使用 2 个字节或 4 个字节(通过代理对)来表示一个字符。如果码点落在基本平面,直接转化成 16 位二进制(两个字节),不足时高位补零;如果码点落在辅助平面,将 20 位二进制分成两段,分别映射到基本平面的特定区间,总共四个字节。

UTF - 32 使用 4 个字节来表示一个字符,每个字符的码点直接映射为字节序列。

Unicode 的实现方式

Unicode 的实现方式称为 Unicode 转换格式(Unicode Transformation Format,简称为 UTF)。主要有 UTF - 8、UTF - 16、UTF - 32 等,分别以不同的字节数作为编码单位。

例如,如果一个仅包含基本 7 位 ASCII 字符的 Unicode 文件,如果每个字符都使用 2 字节的原 Unicode 编码传输,其第一字节的 8 位始终为 0,会造成较大浪费。此时可以使用 UTF - 8 编码,将基本 7 位 ASCII 字符仍用 7 位编码表示,占用一个字节(首位补 0),遇到与其他 Unicode 字符混合的情况,按一定算法转换,每个字符使用 1 - 3 个字节编码,并利用首位为 0 或 1 进行识别,这样对以 7 位 ASCII 字符为主的西文文档就大大节省了编码长度。

Unicode 的作用

Unicode 的作用主要有以下几点:

  1. 统一字符表示:提供了一个统一的字符集,使得不同语言、不同文化背景的字符都能够被准确地表示和处理。它包括了世界上几乎所有的字符,包括字母、数字、标点符号、符号、表情符号等。
  2. 解决字符编码混乱问题:在过去,不同的字符编码标准导致了字符之间的混乱和不兼容。Unicode 的出现解决了这个问题,提供了一个统一的字符编码标准,使得不同系统和应用程序之间能够正确地处理和显示各种字符。
  3. 支持多语言环境:支持几乎所有的语言,包括拉丁字母、中文、日文、俄文等。这使得在多语言环境下进行开发和交流变得更加方便和可靠。

Unicode 的学名

Unicode 的学名是 “universal multiple - octet coded character set”,简称为 UCS。现在用的是 UCS - 2,即 2 个字节编码,而 UCS - 4 是为了防止将来 2 个字节不够用才开发的。

综上所述,Unicode 是计算机科学领域里的一项重要业界标准,它的发展历程、编码方式、实现方式、作用以及学名等方面都对计算机系统的文本处理和信息交换起到了至关重要的作用。它为世界上几乎所有的字符提供了统一的编码方案,解决了传统字符编码方案的局限,使得不同语言和文化的文本能够在计算机系统中准确地表示和处理,极大地促进了全球化的信息交流和软件开发。

专业术语

一、码点(Code Point)

码点是 Unicode 中用于标识每个字符的数字。在 Unicode 标准中,字符被分配一个唯一的整数码点值。例如,字母 “A” 的码点是 U+0041。码点的范围从 U+0000 到 U+10FFFF。
码点通常以十六进制表示法书写,前面加上 “U+” 前缀。码点可以用于在编程中引用特定的字符,例如在某些编程语言中,可以使用转义序列来表示特定的 Unicode 码点字符。

二、补充码(Supplementary Code)

  1. 概念
    • Unicode 中的补充码主要用于表示超出基本多语言平面(BMP,码点范围 U+0000 到 U+FFFF)的字符。这些字符通常包括一些较为罕见的文字、特殊符号、 emoji 表情等。
  2. 编码方式
    • 为了表示补充码点的字符,Unicode 使用了一种称为代理对(surrogate pair)的编码技术。代理对两个 16 位的码元(code unit)组成,分别称为高代理(high surrogate)和低代理(low surrogate)。
    • 高代理的码点范围是 U+D800 到 U+DBFF,低代理的码点范围是 U+DC00 到 U+DFFF。通过组合高代理和低代理,可以表示码点范围在 U+10000 到 U+10FFFF 的字符。
  3. 作用
    • 补充码的引入使得 Unicode 能够表示更多的字符,满足了全球各种语言和文化的需求。例如,一些古老的文字系统、特殊的科学符号、新出现的 emoji 等都可以通过补充码在 Unicode 中得到表示。
    • 它也为跨语言文本处理和国际化软件的开发提供了更广泛的支持,确保不同语言的文本能够在计算机系统中正确地存储、传输和显示。

三、码元(Code Unit)

  1. 定义
    • 在 Unicode 中,码元是用于编码字符的最小单位。对于不同的 Unicode 编码形式(如 UTF-8、UTF-16、UTF-32),码元的大小是不同的。
  2. UTF-8 中的码元
    • 在 UTF-8 编码中,码元是一个 8 位的字节。UTF-8 使用可变长度的编码方式,一个字符可以由 1 到 4 个字节组成。
    • 例如,ASCII 字符(码点范围 U+0000 到 U+007F)在 UTF-8 中只占用一个字节,即一个码元。而对于一些非 ASCII 字符,可能需要多个字节(多个码元)来表示。
  3. UTF-16 中的码元
    • 在 UTF-16 编码中,码元是一个 16 位的单元。对于基本多语言平面(BMP)的字符,一个字符可以直接用一个 16 位的码元表示。
    • 对于超出 BMP 的补充字符,需要使用两个 16 位的码元组成的代理对来表示。
  4. UTF-32 中的码元
    • 在 UTF-32 编码中,码元是一个 32 位的单元。每个字符都占用四个字节,即一个码元。

四、平面(Plane)

  1. 基本多语言平面(BMP)
    • 这是 Unicode 中最常用的平面,码点范围从 U+0000 到 U+FFFF。包含了大多数常见的字符,如拉丁字母、中文、日文、韩文、阿拉伯文等。
  2. 辅助平面(Supplementary Planes)
    • Unicode 中有 16 个辅助平面,码点范围从 U+10000 到 U+10FFFF。辅助平面主要用于表示一些较为罕见的字符、特殊符号、 emoji 表情等。
    • 如一些古老的文字系统、特殊的科学符号、少数民族语言字符等都可能在辅助平面中。

五、字符属性(Character Properties)

  1. 定义
    • Unicode 为每个字符定义了一系列的属性,这些属性描述了字符的各种特征和行为。
  2. 常见的字符属性
    • 类别(General Category):将字符分为不同的类别,如字母、数字、标点符号、符号等。
    • 大小写属性(Case Properties):对于字母字符,确定其大小写形式以及大小写转换规则。
    • 方向属性(Bidirectional Properties):用于确定字符在文本中的显示方向,特别是在处理从右到左书写的语言时非常重要。
    • 组合属性(Combining Properties):描述字符是否可以与其他字符组合形成复合字符。
  3. 作用
    • 字符属性在文本处理和排版中起着重要的作用。例如,在进行文本格式化、搜索和排序时,可以根据字符的属性进行特定的处理。
    • 它们也有助于确定字符在不同语言环境中的正确显示和行为。

六、正规化(Normalization)

  1. 定义:
    • 在 Unicode 中,正规化是将文本转换为一种标准形式的过程。由于 Unicode 允许同一字符有多种表示方式(例如,通过组合字符或预组合字符表示),正规化可以确保文本在比较、排序和存储时具有一致性。
  2. 正规化形式:
    • Unicode 定义了多种正规化形式,最常见的是 NFC(Normalization Form C)和 NFD(Normalization Form D)。
    • NFC 将字符尽可能地组合成预组合形式,而 NFD 将字符分解为基本字符和组合字符。
  3. 作用:
    • 有助于解决在不同系统和应用程序之间处理文本时可能出现的不一致问题。例如,在进行字符串比较或数据库存储时,如果不进行正规化,可能会因为同一字符的不同表示而导致错误的结果。

七、字形(Glyph)

  1. 定义:
    • 在 Unicode 中,字形是字符的可视表示形式。一个字符可以有多个不同的字形,具体取决于字体、字号、样式等因素。
  2. 与码点的关系:
    • 一个 Unicode 码点对应一个或多个字符概念,但具体的字形会因字体设计和显示环境的不同而有所变化。
  3. 作用:
    • 在排版和图形设计中,字形的选择和呈现对于文本的可读性和美观性至关重要。不同的字体可能会为同一字符提供不同的字形设计,以满足不同的设计需求和风格。

八、字符编码方案(Character Encoding Scheme)

  1. 定义:
    • 字符编码方案是将 Unicode 码点转换为字节序列的方法。不同的编码方案适用于不同的应用场景和需求。
  2. 常见的编码方案:
    • UTF-8、UTF-16 和 UTF-32 是最常用的 Unicode 编码方案,如前面所述,它们分别以不同的字节长度作为码元,并且具有不同的编码特点和适用范围。
    • 其他编码方案还包括 UCS-2(已被 UTF-16 取代)、GBK(用于简体中文的编码方案,但不是完全的 Unicode 编码)等。
  3. 选择编码方案的考虑因素:
    • 存储空间需求:不同的编码方案占用的存储空间不同,需要根据实际应用的存储限制来选择合适的编码方案。
    • 兼容性:确保所选择的编码方案与目标系统和应用程序兼容,能够正确地处理和显示 Unicode 字符。
    • 性能:某些编码方案在特定的操作(如字符串比较、搜索)上可能具有更好的性能。

九、字符集(Character Set)

  1. 定义:
    • 字符集是一组特定的字符的集合。Unicode 是一种广泛使用的字符集,它包含了世界上几乎所有的书写系统中的字符。
  2. 与编码方案的区别:
    • 字符集定义了哪些字符存在,而编码方案则规定了如何将这些字符表示为字节序列。
  3. 常见的字符集:
    • ASCII(美国信息交换标准代码)是一种早期的字符集,只包含 128 个字符,主要用于英语和一些基本的控制字符。
    • ISO-8859 系列是一组针对不同语言的字符集扩展,每个系列针对特定的语言或地区。
    • GB2312、GBK 和 GB18030 是用于简体中文的字符集,其中 GB18030 是中国国家标准的 Unicode 扩展字符集。

十、双向文本(Bidirectional Text)

  1. 定义:
    • 双向文本是指包含从左到右(如英语)和从右到左(如阿拉伯语、希伯来语)书写方向的文本。
  2. Unicode 对双向文本的处理:
    • Unicode 定义了一套规则来处理双向文本,确保在混合书写方向的文本中,字符能够正确地显示和排版。
    • 这些规则包括确定字符的方向属性、处理嵌入的从左到右或从右到左的文本片段、以及控制文本的显示顺序。
  3. 作用:
    • 在多语言环境中,特别是涉及到从右到左书写的语言时,正确处理双向文本对于确保文本的可读性和正确性至关重要。它使得不同书写方向的文本能够在同一文档或界面中和谐共存。

十一、字符名称(Character Name)

  1. 定义:
    • Unicode 为每个字符分配了一个唯一的名称,用于描述该字符的含义或用途。例如,字符 “U+0041”(拉丁大写字母 A)的名称是 “LATIN CAPITAL LETTER A”。
  2. 作用:
    • 字符名称可以帮助人们更容易地理解和识别特定的字符,尤其是在处理不熟悉的字符或符号时。
    • 在编程和文本处理中,字符名称也可以用于查找和引用特定的字符。

十二、字符范围(Character Range)

  1. 定义:
    • 字符范围是指一组连续的 Unicode 码点所代表的字符集合。可以通过指定起始码点和结束码点来定义一个字符范围。
  2. 用途:
    • 在文本处理中,字符范围可以用于过滤、搜索或替换特定的字符集合。例如,可以定义一个字符范围来排除某些特殊字符或只处理特定语言的字符。
    • 在正则表达式中,也可以使用字符范围来匹配特定的字符集合。

十三、字符映射(Character Mapping)

  1. 定义:
    • 字符映射是将一个字符集或编码中的字符转换为另一个字符集或编码中的对应字符的过程。
  2. 与 Unicode 的关系:
    • Unicode 提供了一种通用的字符映射标准,使得不同的字符集和编码可以相互转换。例如,可以将一个使用特定国家或地区编码的文本转换为 Unicode 编码,以便在不同的系统和应用程序中进行处理。
  3. 作用:
    • 字符映射在跨平台和跨语言的文本处理中非常重要,它允许不同的系统和应用程序之间共享和交换文本数据,而无需担心字符编码的不兼容性。

十四、字符集版本(Character Set Version)

  1. 定义:
    • Unicode 标准会随着时间的推移不断更新和发展,每次更新都会发布一个新的版本。字符集版本指的是特定时间点上的 Unicode 字符集的状态。
  2. 版本更新内容:
    • 新版本的 Unicode 可能会添加新的字符、修改现有字符的定义或属性、调整编码方案等。
  3. 影响:
    • 软件开发者和用户需要关注 Unicode 版本的更新,以确保他们的应用程序能够正确处理新的字符和编码变化。同时,不同版本的 Unicode 可能会对兼容性和互操作性产生影响。

十五、字符集注册(Character Set Registration)

  1. 定义:
    • 字符集注册是将一个新的字符集或编码方案提交给相关的标准组织或机构进行登记和认可的过程。
  2. 与 Unicode 的关系:
    • Unicode 联盟负责管理和维护 Unicode 标准,同时也接受新的字符集注册申请。如果一个新的字符集或编码方案被认为具有足够的价值和通用性,它可能会被纳入 Unicode 标准中。
  3. 作用:
    • 字符集注册有助于确保字符集的标准化和互操作性,使得不同的系统和应用程序能够识别和处理新的字符集。同时,注册也为字符集的开发者提供了一种官方认可和推广的途径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值