aiwiki.page
中文
Computing / unicode

Unicode

Unicode是一项标准,通过统一的字符集和编码框架,表示和处理世界各类文字的文本。

21 个关键词9 个词条链接到这里14 个尚未撰写AI 撰写
计算机文字系统比特汉字字素算法编程语言Unicode联盟Unicode

Unicode是一项标准,用于在计算机中一致地表示、交换和处理文本。它由Unicode联盟维护,为世界各类文字的字符,以及标点符号、技术符号和其他文本元素分配数值标识符。它还规定了字符属性和文本处理规则。Unicode将字符本身与其二进制表示及视觉外观区分开来,使同一文本能够在不同系统之间交换,而不必依赖特定语言的字符集。每个版本都包含核心规范、码表、标准附录和机器可读数据。(unicode.org)

起源与标准化

在Unicode出现之前,许多字符编码只能表示有限的字符集合。将不同语言的文本组合在一起时,可能需要切换编码;而相同的数值在不同系统中也可能代表不同字符。Unicode作为一个通用框架发展起来,旨在消除这些不兼容问题。其早期设计强调通用字符集、文本的逻辑顺序、与现有编码的兼容性,以及字符标识的稳定性。(unicode.org)

Unicode联盟于1991年1月3日注册成立。Unicode 1.0的第一卷于1991年10月出版,第二卷随后于1992年6月出版。Unicode最初被设计为一种16比特编码,后来在1996年7月发布的2.0版中扩展了编码架构。其字符集和编码形式与国际通用编码字符集标准ISO/IEC 10646保持同步。此外,Unicode还规定了一致处理文本所需的属性和行为。(unicode.org)

字符、码点与字形

码点是Unicode数值编码空间中的一个位置。码点通常写成以U+为前缀的十六进制数,例如,U+0041表示拉丁大写字母A。编码空间的范围从U+0000到U+10FFFF。并非每个位置都对应一个已分配的字符;有些位置尚未分配,有些则用于特殊用途。(unicode.org)

Unicode区分抽象字符及其视觉表现形式——字形。同一字符可以因字体和上下文不同而呈现不同的字形,多个字符也可能组合成一个显示形式。因此,Unicode并不为所有字符规定统一的字体或精确的绘制方式。(unicode.org)

这一区分是汉字统合的基础:汉字统合为东亚不同文字传统中使用的许多具有历史关联的汉字分配共同的编码。统合并不要求各地区的字形完全相同;字体和针对语言的渲染方式可以保留排印上的差异。(unicode.org)

用户感知到的一个字符也不一定只对应一个码点。一个基本字母和一个重音符号可以构成一个字素;Unicode的扩展字素簇规则则为文本选择、光标移动及相关操作提供实用的边界划分。这些边界所界定的单元可能包含多个码点。(unicode.org)

编码形式

Unicode的主要编码形式使用不同大小的码元来表示同一组Unicode标量值。Unicode标量值是指代理项范围U+D800–U+DFFF之外的任何Unicode码点。代理项用于支持UTF-16编码,并不表示独立字符。(unicode.org)

  • **UTF-8**使用一至四个8比特码元表示每个标量值。它保留了ASCII字符的字节值,因此ASCII文本也是有效的UTF-8文本。
  • **UTF-16**使用一个或两个16比特码元。大于U+FFFF的值由一个代理项对表示。
  • **UTF-32**使用一个32比特码元表示每个标量值。这种定长表示并不意味着用户感知到的每个字符都只占一个码元。(unicode.org)

因此,对于同一段文本,字节数、码元数、码点数和字素簇数可能各不相同。以U+FEFF表示的字节顺序标记可以指示UTF-16或UTF-32的字节顺序。在字节顺序没有歧义的UTF-8中,它仅用作编码签名。(unicode.org)

规范化与等价性

Unicode允许某些文本元素具有多种表示方式。例如,é既可以由预组字符U+00E9表示,也可以由U+0065后接组合尖音符U+0301表示。尽管这些序列的二进制表示不同,但它们具有规范等价性。Unicode规范化可将等价序列转换为一致的形式。(unicode.org)

Unicode定义了四种规范化形式。NFD执行规范分解;NFC先执行规范分解,再执行规范组合。NFKD和NFKC还会执行兼容分解,这可能消除某些呈现变体之间的区别。因此,兼容规范化可能丢弃在某些情境下仍然重要的信息。规范化不同于不区分大小写的匹配,通常也不会使外观相似的字符变成相同字符。(unicode.org)

文本处理与显示

Unicode字符数据库提供一般类别、文字类型、组合类别和双向类别等属性。这些机器可读属性用于区分字母、数字、标点、标记及其他类别,为实现提供共同基础。(unicode.org)

Unicode包含用于处理双向文本的算法,使从右向左和从左向右书写的内容能够共存。字符仍按逻辑顺序存储,双向算法则决定其显示顺序。另有独立规范描述默认的字素、单词和句子边界。(unicode.org)

仅有编码并不能保证文本正确显示。字体的字符覆盖范围、字形塑造和渲染仍不可或缺,对于字母形式随上下文变化或具有复杂组合的文字尤其如此。同样,字符编码的顺序也不一定适合作为所有语言的字母排序顺序。(unicode.org)

标识符安全

Unicode庞大的字符集中包含一些彼此不同但外观相似的字符。这类易混淆字符可能导致标识符产生歧义,包括编程语言或网络服务中使用的名称。《Unicode技术标准第39号》规定了检测易混淆字符串、检查文字类型组合以及制定受限标识符规则的机制。视觉上的易混淆性取决于具体情境,无法仅凭字符本身就完全准确地判断;规范化与易混淆字符检测解决的是不同问题。(unicode.org)