一二三四高清中文版视频(Unicode字符编码标准(中文版))

更新时间:2023-06-07 11:17:23 所在栏目: 生活常识点击量:

Unicode字符编码标准(中文版)

如今Unicode Standard的最新版本是13.0.0, 你可以从
https://www.unicode.org/versions/Unicode13.0.0/UnicodeStandard-13.0.pdf 下载最新的英文版本。

本文不是原创,引用自
https://blog.csdn.net/liuyanhuasd/article/details/81744719

1. 编码知识

  • 1.1 文本和字符

在盘算机步骤中大概数据文件里,文本(text)是作为数字序列存储的。序列中的数字是具有不同轻重、取值息争释的整数。怎样表明这些整数是由字符集(character set)、编码(encoding)决定的。

文本主要是由字符(character)构成。在格式文本(fancy text, or rich text)中包含体现属性,如颜色、斜体字、上标等,但仍旧是以字符构成的纯文本(plain text)为基本的。偶尔,格式文本与纯文本之间的区别很繁复,依托于具体的使用。

什么是字符?典范地,是字母。也可以是数字、句点、连字号、标点标记和数学标记,关于中文,也可以是汉字。还包含界说行尾和段落等的控制字符(寻常不偏见)。 有了字符,就可以为它们分派数字编码。为字符分派什么数字值,依托于具体情况。一个简便的字符,如字母"a",在不同的步骤大概数据文件中约莫具有不同的整数值。

  • 1.2 字符集

具多数字编码的字符在信息处理中,所使用的整数总有极限,依托于存储整数的位的数目。这也决定了可以同时区分的字符的数目。 在计划字符集时,起主要决定所需字符的数目,并确定所需字符的清单。依据字符的数目,可以设定整数值的极限,这个整数范围称为编码空间(code space),此中的一个特定整数称为一个码点(code point)。 然后,为字符清单中的每个字符指定一个整数值,也就是一个码点。如此就取得一个字符集,称作编码字符集(Coded Character Set)

  • 1.3 编码单位、字节和编码

在盘算机体系的完成中,整数以特定轻重的单位表现,通常为8位(1字节),16位,或32位。在字符编码中,如此的单位称为编码单位(code unit)。依据编码空间的轻重和具体要求,来选择切合的编码单位。通常,所选择编码单位对应的整数范围要大于编码空间的整数范围,如此每个码点就只需一 个编码单位表现,并且在字符码点与编码单位间的转换十分笨重,由于字符码点对应的整数值与相应编码单位的整数值相反。假如编码单位对应的整数范围小于编码 空间的整数范围,就必要多个编码单位表现一个码点。

字节是盘算机体系中最基本的表现单位,无论是存储在内存中,照旧将文本写入文件或经过网络发送,总是要读写多少字节。因此,在实践使用中,还必要将编码单位进一步表现为字节序列。

将字符表现为字节序列的历程就称为编码(encoding),更紧张的是,还包含怎样对字节序列举行表明以取得字符。

  • 1.4 不同的字符集

在一些常用的编码中,每个字符只使用一个字节表现,称单字节字符集(single-byte character set, SBCS)。这些字符集都仅限于256个字符。

在ASCII之后,现在使用最广泛的单字节字符集是ISO-8859-1。它是ASCII的一个8位超集,并且提供西欧言语所需的大大多字符。它的一个改良的版本,ISO-8859-15,还包含新的欧元标记和更多的一些法语和芬兰语字母。

双字节字符集(double-byte character set, DBCS)用于为东亚誊写体系中所使用不计其数个表意字符提供充足空间。这里的编码照旧基于字节的,不外是两个字节一同表现一个单一的字符。

即使在东亚,文本中也会包含小字母表中的字母,如拉丁字母表。这些字母使用单字节表现的听从会更高。

因此,提出了多字节字符集(multi-byte character set, MBDC),使用可变数目标字节来表现字符。多字节字符集通常与ASCII兼容,也就是说,在这种编码中,拉丁字母使用与ASCII中相反的字节来表现。 一些不常用的字符约莫会使用三个乃至四个字节编码。

  • 1.5 稀有字符集
  • 1.5.1 ASCII: The American Standard Code form Information Interchange

ASCII是一个使用7位单位的字符集,及针对7位字节的简便编码办法。只管范围于很少的一些字符,ASCII是最紧张的一种字符集,由于它是现在大大多字符集的基本。 ASCII只提供了128个数字值(也可称作码点,code point),此中33个被保存用作特别功效。仅有95个码点用作"真正的"文本字符。这些图形字符大多时大写和小写拉丁字母,数字和标点标记,外加一些特别的括号、下划线和重音标记。

  • 1.5.2 EBCDIC: The Extended Binary-Coded Decimal Interchange Code

EBCDIC是由IBM计划的编码格式,使用8位字节,被一些字符集用于大型机。EBCDIC在与ASCII相近的时期开发的,具有一些相似的特性。

  • 1.5.3 Unicode

Unicode标准界说了一个字符集和几种编码。

Unicode最有吸引力的特点是它涵盖了几乎天下上的一切字符,可以只经过一个唯一的数字(Unicode码点)来拜候和利用字符。

2. Unicode先容

  • 2.1 为什么使用Unicode?

在创造Unicode之前,多数百种编码体系。但是,没有任何一个编码可以包含充足的字符。比如,仅欧州协同体就必要好几种不同的编码来包含一切的言语。即使是单一的一种言语,如英语,也没有哪一个编码可以实用于一切的字母,标点标记,和常用的武艺标记。 这些编码体系也会互相分歧。也就是说,两种编码约莫使用相反的数字代表两个不同的字符,或使用不同的数字代表相反的字符。任何一台特定的盘算机(特别是办事器)都必要支持很多不同的编码,但是,不管什么时分数据经过不同的编码或平台之间,那些数据总会有毁坏的伤害。

而Unicode正在改动一切这统统! 在Unicode标准中,提供了1,114,112个码点,不仅可以包含当今天下使用的一切言语笔墨和其他标记,也充足包容绝大大多具有汗青意义的古笔墨和标记。并且,Unicode给每个字符提供了一个唯一的数字,不管是什么平台,不管是什么步骤,不管什么言语。 Unicode 标准以前被产业界的向导们所接纳,比如:Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, Sun, Sybase, Unisys等等。最新的标准都必要Unicode,比如XML, Java, ECMAScript , LDAP, CORBA 3.0, WML等等,并且,Unicode是完成ISO/IEC 10646的正轨办法。很多利用体系,一切最新的欣赏器和很多其他产物都支持它。Unicode标准的显现和支持它东西的存在,是迩来举世软件武艺最紧张 的提高趋向。

  • 2.2 Unicode与国际化

直到迩来,国际化的常用办法是,假定任何给定的可实行步骤同时只和一种言语事情。假如在英文情况下安装,它就只处理英文文本;假如在中文情况下安装,就只处理中文文本。

在这种模子下,针对不同的誊写体系和言语,使用的字符集和字符编码不同。在Windows和大型机情况下,术语"代码页"(Code Page)用于形貌怎样将二进制值映射到人类可读得字符(字形)。一个运转的步骤处在单一的代码页,该代码页确定二进制值如和与字形关联。

笨重的国际化是Unicode的另一项上风。在内里使用Unicode的使用步骤,可以同时存储和处理天下上一切的字符,这消弭了传统的国际化办法所面临的一些困难。 固然,告捷的国际化不仅仅是在使用步骤中接纳Unicode,还必要审慎的屏幕布局计划(不同的言语具有不同的誊写习气)、翻译和文明了解。

  • 2.3 计划准则

Unicode的计划反应了十大基本准则,但这些准则并不是可以同时满意。整个计划是在确保笨重高效和坚持与已有编码标准兼容之间的均衡。

(1)广泛性(Universality)

Unicode标准对一个单一的大字符集举行编码,包含满意天下范围需求的一切字符。

(2)高效(Efficiency)

在Unicode的字符编码模子中没有换码符(escape character),每个字符编码与别的字符编码具有相反的形态。使高听从的完成成为约莫。 一切Unicode编码办法都是自同步的,并且互相不堆叠。使在字符流中随机拜候和查找利用高效。 同一誊写字母体系中的字符被安排在一同,不仅便利字符的查找,并且使完成更紧凑紧缩办法更高效。

(3)针对字符编码,而不是字形(Character, Not Glyph)

字符是誊写言语中具有语义的最小组件的笼统表现。字符是以驻留在内存中的码点表现。 字形是字符被体现时具有的外形。与字符比拟,字形显如今屏幕或纸张上作为一个或多个字符的特定表现。字形的聚集构成一种字体。 字符和字形间存在多种干系:一个字形可以对应一个字符;一个字形也可以对应几个字符;多个字形也约莫出自一个字符。

(4)语义(Semantic)

在Unicode中,字符都有明白界说的语义。字符属性表可用于剖析、排序等必要有关码点语义知识的算法中。Unicode中界说的属性包含数字、距离、组合和朝向属性。

(5)纯文本(Plain Text)

纯文本或无格式文本,仅仅是字符编码的序列。纯Unicode文本就是Unicode编码的序列。而格式文本(styled text, or rich text)是由纯文本添加一些附加信息(如言语标识、字体轻重、颜色等)构成的文本表现。 Unicode标准针对的是纯文本。

(6)逻辑排序(Logical Order)

Unicode文本在内存表现中以逻辑排序存储,大抵对应于借助键盘输入文本的排序。在一些情况下,当体现或打印文本时,字符排序与逻辑排序不同。

(7)一致(Unification)

Unicode标准为制止对字符反复编码,对不同言语誊写办法中的字符举行一致,相反的字符分派唯一的一个编码。平凡字母、标点标记、标志,和变音符都只分派一个编码,而不管言语;相反的另有中日韩使用的表意字符。

(8)动态组合(Dynamic Composition)

Unicode标准允许增重音符好的情势和Hangul音节的动态组合。

(9)等价序列(Equivalent Sequences)

一些文本元素即可以使用静态的事后组合好的情势,也可使用动态组合的情势。Unicode字符的不同表现序列被以为是等价的。 假如两个或多个序列被以为是等价的,Unicode标准不划定哪一种特定的序列是准确的,而以为每一个序列只不外与别的序列等价。 如 果必要一种单一的单一的表现办法,可以使用一种标准化的Unicode文本情势来变小不想要区别。Unicode标准界说了四种标准化情势: Normalization Form D (NFD),Normalization Form KD (NFKD),Normalization Form C (NFC),和Normalization Form KC (NFKC)。约莫来说,NFD和NFKD将约莫的字符举行分析,而NFC和NFKC将约莫的字符举行组合。

(10)可转换性(Convertibility)

在Unicode 标准和其他字符集标准之间可以完成准确的转换。寻常说,在其他标准中的一个码点对应于Unicode标准中一个单一的码点。但是,偶尔在其他标准中的一个码点对应于Unicode标准中一个码点的序列。在Unicode文本和其他字符编码文本间的转换寻常是经过明白的表映射历程完成的。

  • 2.4 Unicode的码点、编码格式、编码方案
  • 2.4.1 Unicode编码空间和码点

在Unicode标准中,编码空间的整数范围是从0到10FFFF(16进制),共1,114,112个可用的码点。 为了与已有的编码标准兼容,一些笼统字符约莫会与多个分散编码的字符关联。而在其他一些情况下,一个笼统字符约莫会用两个(或更多)编码字符序列来表现,如带重音符的字母。

  • 2.4.2 Unicode编码格式

在Unicode字符编码模子中,编码格式(encoding form)指定怎样将每个码点表现为一个或多个编码单位序列。Unicode标准提供了三种不同的编码格式,使用8位、16位和32位编码单位,分散为UTF-8、UTF-16、UTF-32。

(1)UTF-32

UTF-32是一种最简便的Unicode编码格式。每个Unicode码点被直接表现为一个32位的编码单位。UTF-32是一种安稳宽度的字符编码格式。 每个UTF-32编码单位的值与Unicode码点的值完全相反。

(2)UTF-16

在UTF-16中,在范围U+0000到U+FFFF间的码点使用一个单一的16位编码单位表现;而,在范围U+10000到U+10FFFF间的码点则使用一对16位编码单位表现,称作署理对(surrogate pair)。 UTF -16优化了基本多言语平面(Basic Multilingual Plane)中字符的表现,即位于U+0000到U+FFFF范围内的字符。该范围包含了现在天下上所使用的誊写体系中的绝大大多字符,每个字符只必要一 个16位的编码单位。关于基本多言语平面,UTF-16可作为安稳宽度的编码格式来好效使用。 但关于增补字符,UTF-16必要两个16位的编码单位,意味着正式的UTF-16是一个变宽的编码格式。 UTF-16是早前Unicode遗留下的汗青产物,原本被计划成具有安稳宽度的16位编码格式。为支持凌驾U+FFFF的增补字符,设立了署理机制。

(3)UTF-8

为满意基于ASCII,面向字节的体系的必要,Unicode标准中界说了第三种编码格式UTF-8。它是一种使用8位编码单位的变宽的编码格式。

在UTF-8的编码单位种,一些高位用于指示如今字节在编码单位序列中的那一局部。8位编码单位的取值的一局部范围保存给UTF-8的编码单位序列的首字节;另一局部完全奋力的范围保存给序列中的后续字节,以确保UTF-8不堆叠。

UTF -8编码格式对一切ASCII码点具有纯透性。在U+0000到U+007F范围内的Unicode码点,被转换为UTF-8中单一的字节0x00到 0x7F,与ASCII码没有区别。并且,从0x00到0x7F不会显如今其他Unicode码点的UTF-8表现中的任一字节中,确保了不存在歧义。 Unicode中超出ASCII范围的其他一些非表意字母,每个都在UTF-8中使用两各字节表现;位于U+0800到U+FFFF范围内的非署理码点使用三字节表现;超出U+FFFF的增补码点则必要四字节表现。

UTF-8是Internet中HTML和相似协议偏好的编码格式。 UTF-8同其他的多字节编码办法比拟具有以下特点:

a) UTF-8的编码单位序列的第一个字节指明白后方所跟的字节的数目。对前向剖析十分好效。

b) 从UTF-8字节流的随意地点开头可以好效的找到一个字符的但是地点。

c) UTF-8中不存在字节取值的堆叠。

  • 2.4.3 Unicode编码方案

在Unicode标准中,用于Unicode数据字节串行化的种种不同典范的标准被称为Unicode编码方案(encoding scheme)。

在盘算机体系中,大数值典范(如整型)使用多个字节表现,不同体系布局接纳的字节分列排序不同。此中,局部接纳由高字节到低字节的分列排序,称为big-endian;其他则接纳由低字节到高字节的分列排序,称little-endian。

关于UTF-16和UTF-32,字节串行化标准必需思索如今表现数据的体系接纳的是big-endian照旧little-endian布局。

一个字符编码方案包含指定的字符编码格式,以及怎样将编码单位串行化为字节的标准。在Unicode标准中,还划定了初始的字节排序标志(byte order mark, BOM)的使用,用于体现区分big-endian和little-endian数据。

关于UTF-8,在序列中只包含UTF-8的编码单位(1字节),因此,UTF-8中的数据表现不存在字节排序的成绩。但关于16位和32位的编码方案,字节串行化历程必需将编码单位分析为两个或四个字节,并且必需清晰的界说这些字节的排序。 因此,Unicode标准中界说的三种编码格式,招致统共七种Unicode编码方案,分散为:UTF-8、UTF-16、UTF-16BE、UTF-16LE、UTF-32、UTF-32BE、UTF-32LE。 必需明白,字符编码格式(character encoding form)指在内存或API中的整数数据单位,与字节排序不干系;字符编码方案(character encoding scheme)指字节串行化的数据,如I/O流大概文件,必需订定字节排序。

  • 2.4.4 Unicode编码空间分派

依据在言语学上和功效上的种别,Unicode标准中的编码字符被分红组。 Unicode 编码空间的范围为0到10FFFF,可以被区分为字符平面(planes of characters),每个平面包含64K各码点。因此,最底层的平面为基本多言语平面(Basic Multilingual Plane),包含范围从0000到FFFF;下一个平面为增补多言语平面(Supplementary Multilingual Plane),也被称为第一平面(Plane 1),包含范围10000到1FFFF;以及,第二平面(Plane 2),增补表意字符平面(Supplementary Ideographic Plane),包含范围20000到2FFFF;等等。基本多言语平面偶尔也被称为Plane 0。

基本多言语平面(BMP, or Plane 0)包含现在天下上使用的一切誊写体系中的全部常用字符,以及一些汗青上的不常用字符。

增补多言语平面(SMP, or Plane 1)用于一些较少使用的汗青上的誊写体系,针对特别目标创建的誊写体系,和特别的标志体系,它们要么无法放入基本多言语平面中,要么特别不常用。

增补表意字符平面(SIP, or Plane 2)用于无法放入基本言语平面中所分派地区中/日/韩字符(CJK character)。只管在SIP中包含少数的常用CJK字符(比如,用于粤语),此中绝大大多字符是仅具有汗青意义的不常用字符。

增补自用平面(Supplementary Special-purpose Plane, SSP, or Plane 14)用于无法放入基本多言语平面中所分派地区的格式控制字符。

3. 一律性

切合Unicode一律性要求的完成必需满意本局部界说的标准,以便与其他标准的完成举行交互。

  • 3.1 一律性要求
  • 3.1.1 未分派的码点(Unassigned Code Points)

C4 处理历程不应该把高署理码点(high-surrogate code point)大概低署理码点(low-surrogate code point)表明为笼统字符。

C5 处理历程不应该把非字符码点表明为笼统字符。

C6 处理历程不应该将未分派的码点表明为笼统字符。

  • 3.1.2 表明(Interpretation)

C7 假如处理历程要表明编码字符的表现,就必需依据标准中建立的字符语义举行表明。

C8 不要求处理历程对任何特定的编码字符都作表明。 允许处理历程只表明Unicode字符中的一个子集;不必要表明一切Unicode字符。 标准中不触及任何指定字符子集的办法。 标准中不触及自界说区中码点的语义。

C9 处理历程不应以为对两个具有标准等价性字符序列(canonical-equivalent character sequence)的表明会不同。 该条款包含两层意义:(一)处理历程不应该对两个不同但又具有标准等价性的字符序列由不同的表明;(二)任何处理历程不应假定其他处理历程会对两个不同但具有标准等价性的字符序列举行不同的表明。

  • 3.1.3 修正(Modification)

C10 假如一个处理历程声称不会修正对一个准确的编码字符表现的表明,则它不克不及对编码字符的表现举行任何修正,除非是器具有标准等价性的字符序列举行交换,大概是删除非字符的码点。 器具有标准等价性的字符序列交换原有字符序列不会修正对文本的表明。 交换大概删除处理历程不克不及会不举行表明的字符序列,不修正对文本的表明。 当在不同盘算机体系布局间转换字符序列时,对字符序列位大概字节排序的改动,不修正对文本的表明。 将一个准确的编码字符的表现从一种Unicode字符编码格式转换为另一种编码格式时,不修正对文本的表明。 将编码单位序列的字节串行化从一种Unicode字符编码方案转换为另一种编码方案时,不修正对文本的表明。 假如在处理历程中不测碰到一个没有明白内里用处的非字符,在完成中可以发出错误,大概删除或忽略该非字符。假如没有接纳这些选择,这个非字符应该被作为一个为分派的码点。

  • 3.1.4 字符编码格式(Character Encoding Forms)

C11 当处理历程对一个声称以某种Unicode字符编码格式存在的编码单位序列举行表明时,必需依照相应的码点序列举行表明。

C12 当处理历程以某种Unicode字符编码格式天生编码单位序列时,不应天生情势错误(ill-formed)的编码单位序列。

C12a 当处理历程对一个声称以某种Unicode字符编码格式存在的编码单位序列举行表明时,应该将情势错误的编码单位序列看作错误条件,而不克不及将序列表明为字符。

  • 3.1.5 字符编码方案(Character Encoding Schemes)

C12b 当处理历程对一个具有某种Unicode字符编码方案的字节序列举行处理时,应该依据字节排序和标准中针对字符编码方案设立的字节排序标志(byte order mark)使用标准,举行表明。

  • 3.1.6 双向文本(Bidirectional Text)

C13 用于体现包含从右到左的字符文本的处理历程,当没有高层协议时,必需以对文本使用双向算法后相反的排序体现一切具有可见表现的字符(不包含格式字符)。

  • 3.1.7 正轨化情势(Normalization Forms)

C14 以某种正轨化情势天生Unicode文本的处理历程,必需与Unicode Standard Annex #15 "Unicode Normalization Forms"中界说的标准切合合。

C15 测试Unicode文本对否具有某种正轨化情势的处理历程,必需与必需与Unicode Standard Annex #15中界说的标准切合合。

C16 将文本转换为某种正轨化情势的处理历程必需天生Unicode Standard Annex #15中划定的后果。

  • 3.1.8 标准的引用(Normative References)

C17 对标准、属性别号、属性值别号大概Unicode算法的标准引用,必需依照Unicode标准种指定的格式。

C18 高层协议不克不及对暂且属性举行标准引用。

  • 3.1.9 Unicode算法(Unicode Algorithms)

C19 假如处理历程声称完成某个Unicode算法,则必需切合标准中界说的算法例范,除非被高层协议改动。

  • 3.2 术语界说

以下是对一律性条款中所使用术语的准确界说。

  • 3.2.1 字符的身份和语义(Character Identity and Semantics)

D1 标准的举动(normative behavior):Unicode标准中的标准举动包含以下列表,以及在一律性条款种指定的其他举动。

1. 字符组合;

2. 标准化的分析;

3. 兼容的分析;

4. 标准的排序举动;

5. 双向举动;

6. 团结jamo举动(conjoining jamo behavior);

7. 厘革选择;

8. 正轨化。

D2a 字符身份(character identity):一个字符的身份是由它的字符称呼、表现的字形确定的。

D2b 字符语义(character semantics):一个字符的语义是由它的身份、标准的属性和举动决定的。

  • 3.2.2 字符与编码(Characters and Encoding)

D3 笼统字符(abstract character):信息的单位,用于文本数据的构造、控制或表现。 笼统字符没有具体的外形,不应与字形殽杂。 Unicode标准中没有直接编码的笼统字符常常可以使用组合字符序列表现。

D4 笼统字符序列:笼统字符的有序序列。

D4a Unicode编码空间(Unicode codespace):从0到10FFFF的整数空间(十六进制)。 D4b 码点(code point):Unicode编码空间中的任何一个整数值。 一个码点也称为一个编码地点。

D5 编码字符(encoded character):在一个笼统字符和一个码点间的关联。 在Unicode中,为了与别的标准兼容,一个单个的笼统字符约莫与多个码点对应。 一个单个的笼统字符也约莫使用一个码点序列表现。

D6 编码字符表现(coded character representation):一个码点序列。通常,是由编码字符的序列构成,但也约莫包含非字符或保存的码点。 编码字符表现也称为编码字符序列(coded character sequence)。 在内里,处理历程约莫会在编码字符表现中使用非字符码点。但是,这些非字符码点约莫不会被表明成笼统字符;并且,假如这些非字符码点被具有一律性的处理历程删除,不构成对编码字符表现表明的修正。

D7a 不同意使用的字符(deprecated character):剧烈不勉励使用的编码字符。 在标准中保存不同意使用的字符,以便使从前相容的数据仍旧与今后的Unicode标准坚持一律性。

D7b 非字符(noncharacter):被永世保存做内里使用的码点,不使用于互换。非字符包含值U+nFFFE和U+nFFFF(n表现十六进制整数从0到10),以及值从U+FDD0到U+FDEF。

D7c 保存的码点(reserved code point):Unicode标准中保存的,用于今后分派的码点。也称为位分派码点(unassigned code point)。 署理码点和非字符码点是已分派的码点,但不是分派给字符。

D8 高层协议(higher-level protocol):任何超出Unicode标准范围,对Unicode字符举行表明协议。

D8a Unicode算法(Unicode Algorithm):对处理历程的逻辑形貌,用于取得触及Unicode字符的指定后果。

  • 3.2.3 属性(Properties)

(1)标准的和指示性属性(Normative and Informative Properties) Unicode字符属性可以分为标准的和指示性的。

D9 标准属性(normative property):Unicode字符属性,它的取值必需为与标准相一律。

D9a 指示性属性(Informative property):Unicode字符属性,它的取值仅仅是为了提供更多信息。

D9b 暂且的属性(provisional property):Unicode字符属性,它的取值未被同意、实验性的,也约莫是不完全的。

(2)简便的和衍生出的属性(Simple and Derived Properties)

D9c 简便属性(simple property):Unicode字符属性,它的取值在UCD,the Unicode Character Database(或标准中的其他场合)直接指定,并且它的取值无法从其他简便属性中衍生出来。

D9d 衍生属性(derived property):Unicode字符属性,它的取值可经过算法从一些简便属性的组合中衍生出来。

(3)属性别号(Property Aliases)

D10 属性别号(property alias):特定Unicode字符属性的一个唯一标示名。 用于属性别号的标示名中仅包含ASCII中的字母、数字和下划线。 为每个属性别号分散界说了长、短两种情势的称呼。短的情势寻常仅有两个或三个字符长,便于在标志言语中用于标志属性。

D10a 属性值别号(property value alias):为Unicode字符属性的特定取值界说的唯一标示名。 用于属性值别号的标示名中仅包含ASCII中的字母、数字和下划线,大概是特别的值"n/a"。 为每个属性值别号分散界说了长、短两种情势的称呼。 属性值别号仅在干系联的特定属性情况中唯一。

(4)却省属性值(Default Property Value)

D11 却省属性值(default property value):针对一个给定的Unicode属性,用于指派给未分派的码点或没有明白指定其他属性值的属性值。

(5)私用(Private Use)

D12 私用码点(private-use code point):在范围U+E000到U+F8FF、U+F0000到U+FFFFD和U+100000到U+10FFFD内的码点。 私用码点被以为已分派给字符,但标准中没有指定对私用码点干系联的笼统字符的表明。 私用码点约莫会被赋予却省的属性值,但这些却省值可以被对私用码点举行表明的高层协议交换。

3.2.4 组合(Combination)

D13 基字符(base character):在誊写上,不与前方的字符举行组合的字符,它既不是控制字符也不是格式字符。

D14 组合字符(combining character):在誊写上,与前方的基字符举行组合的字符。称组合字符使用于基字符。 组合字符不但独使用。它们包含重音符、变音符、希伯莱文中的点、阿拉伯文元音标记等。 只管组合字符用来与基字符组合体现的,但约莫显现两种情况(1)在组合字符前没有基字符;(2)处理历程无法实行组合利用。在这两种情况下,处理历程约莫会不举行誊写上的兼并而体现组合字符。 在编码表中,组合字符的表现使用虚线圆圈刻画。当与前方的基字符组合体现时,基字符要显如今虚线圆圈的地点上。 组合字符寻常具有它们的基字符的属性,同时保存它们的组合属性。 控制字符和格式字符,如tab和right-left mark不是基字符。

D15 非间距标志(nonspacing mark):在体现时,地点取决于基字符的组合字符。这些字符寻常在可视基线上不占用空间。 这些字符约莫会很大,影响它们的基字符干系于前后基字符的安排。

D16 间距标志(spacing mark):不好坏间距标志的组合字符。 寻常来说,间距标志的举动与基字符没有太大区别。 D17 组合字符序列(combining character sequence):一个字符序列,由一个基字符后跟了一个或多个组合字符构成,大概是一个或多个组合字符的构成的序列。

D17a 不良的组合字符序列(defective combining character sequence):一个不是以基字符开头的组合字符序列。 当组合字符序列显如今串的开头地点,大概跟在控制字符或格式字符后显现时,产生不良的组合字符序列。

  • 3.2.5 分析(Decomposition)

D18 可分析字符(decomposable character):依据分析映像表,与一个或多个字符构成的序列等价的字符。也被称作预组合字符(precomposed character)或复合字符(composite character)。

D19 分析(decomposition):与一个可分析字符等价的一个或多个字符构成的序列。一个字符序列的完全分析,是对序列中每个字符举行分析直到没有字符可以进一步分析。

(1)兼容的分析(Compatibility Decomposition)

D20 兼容的分析(compatibility decomposition):递归使用Character Names List中的兼容映像表和标准映像表,以及Conjoining Jamo Behavior中的界说,对字符举行分析,直到没有任何字符可以进一步分析,并依据Canonical Ordering Behavior中的界说对非间距标志举行重新排序。

D21 兼容的可分析字符(compatibility decomposable character):兼容分析的后果与标准分析后果不相反的字符。

(2)标准的分析(Canonical Decomposition)

D23 标准的分析(canonical decomposition):递归使用Character Names List中的标准映像表,以及Conjoining Jamo Behavior中的界说,对字符举行分析,直到没有任何字符可以进一步分析,并依据Canonical Ordering Behavior中的界说对非间距标志举行重新排序。 D21 标准的可分析字符(compatibility decomposable character):与标准分析后果不相反的字符。 D24 标准等价性(canonical equivalent):假如两个字符序列的完全标准分析后果相反,称它们具有标准的等价性。

3.2.6 署理(Surrogates)

D25 高署理码点(high-surrogate code point):位于范围U+D800到U+DBFF内的Unicode码点。

D25a 高署理编码单位(high-surrogate code unit):在范围D800到DBFF内的16位编码单位,作为UTF-16中署理对的起始编码单位。

D26 低署理码点(low-surrogate code point):位于范围U+DC00到U+DFFF内的Unicode码点。

D26a 低署理编码单位(low-surrogate code unit):在范围DC00到DFFF内的16位编码单位,作为UTF-16中署理对的开头编码单位。

D27 署理对(surrogate pair):由两个16位编码单位构成的序列来表现单个的笼统字符,此中,署理对的第一局部为高署理编码单位,第二局部为低署理编码单位。 署理对仅用于UTF-16。 伶仃的署理编码单位本身没有表明。

  • 3.2.7 Unicode编码格式(Unicode Encoding Forms)

D28 Unicode标量值(Unicode scalar value):除了高署理和低署理码点外的其他一切Unicode码点。

D28a 编码单位(code unit):为了处理和互换,表现编码文本单位的最小的位组合。 编码单位是盘算机存储中的特定单位。Unicode标准在UTF-8中使用8位编码单位,在UTF-16中使用16位编码单位,在UTF-32中使用32位编码单位。 在Unicode标准中,一些编码单位的特定值不克不及单独用于表现编码字符。该限定条件使用于UTF-16中伶仃的署理码点,以及UTF-8中的字节80-FF。

D28b 编码单位序列(code unit sequence):一个或多个编码单位的有序序列。 当编码单位是8位时,编码单位序列也可被称作字节序列。 一个编码单位序列约莫仅有一个单个的编码单位。 在步骤计划言语中,字符串典范的值基本由编码单位序列构成。 依托字符编码标准的布局,约莫要使用编码单位序列(包含多个编码单位)来表现一个单个的编码字符。

D29 Unicode编码格式将每个Unicode标量值分派给一个唯一的编码单位序列。 由于汗青缘故,Unicode编码格式也被称作Unicode(or UCS) transformation formats(UTF)。 在Unicode标量值聚集与针对Unicode编码格式的编码序列聚集间的映射是一对一的。 对给定的编码格式,存在编码单位序列没有干系联的Unicode标量值。

D29a Unicode串(Unicode string):由Unicode编码格式中编码单位构成的编码单位序列。

D29b 8位Unicode串(Unicode 8-bit string):只包含UTF-8编码单位的Unicode串。

D29c 16位Unicode串(Unicode 16-bit string):只包含UTF-16编码单位的Unicode串。

D29d 32位Unicode串(Unicode 32-bit string):只包含UTF-32编码单位的Unicode串。

D30 情势不良的(ill-formed):假如具有Unicode编码格式的Unicode编码单位序列没有依照Unicode编码格式标准,就称为情势不良的。 假如编码单位序列对应的码点位与Unicode标量范围之外,就是情势不良的。 UTF-8对起始字节和后续字节的字节范围有严厉的束缚。违反这些束缚,将使天生的编码单位序列无法映射到Unicode标量值上,产生一个情势不良的编码单位序列。

D30a 情势精良的(well-formed):依照Unicode编码格式标准的Unicode编码单位序列,就成为情势精良的。

D30b 情势精良的UTF-8编码单位序列(well-formed UTF-8 code unit sequence)

D30c 情势精良的UTF-16编码单位序列(well-formed UTF-16 code unit sequence)

D30d 情势精良的UTF-32编码单位序列(well-formed UTF-32 code unit sequence)

D30e 具有Unicode编码格式(in a Unicode encoding form):假如一个Unicode串是由某个特定的Unicode编码格式的情势精良的编码单位序列构成,称该Unicode字符串具有Unicode编码格式。

UTF-32

D31 UTF-32编码格式(UTF-32 encoding form):一种Unicode编码格式,为每个Unicode标量值分派一个单一的无标记的32位编码单位,编码单位的数字值与Unicode标量值相反。 由于署理码点没有包含在Unicode标量值聚集中,以是位与范围0000D800到0000DFFF间的UTF-32编码单位使情势不良的。 任何大于0010FFFF的UTF-32编码单位是情势不良的。

UTF-16

D35 UTF-16编码格式(UTF-16 encoding form):一种Unicode编码格式,为处在范围U_0000到U+D7FF和U+E000到U+FFFF内的每个Unicode标量值分派一个单一 的无标记的16位编码单位,编码单位的数字值与Unicode标量值相反;位处在范围U+10000到U+10FFFF内的每个Unicode标量值分派 一个署理对。 由于署理码点不是Unicode标量值,位于范围D800到DFFF间单独的UTF-16编码单位是情势不良的。 UTF-16 Bit Distribution Scalar Value UTF-16 xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx 000uuuuuxxxxxxxxxxxxxxxx
110110wwwwxxxxxx110111xxxxxxxxxx wwww=uuuuu-1

UTF-8

D36 UTF-8编码格式(UTF-8 encoding form):一种Unicode编码格式,位每个Unicode标量值分派一个由一到四个无标记字节构成的序列。 UTF-8 Bit Distribution Scalar Value 1st Byte 2nd Byte 3rd Byte 4th Byte 00000000 0xxxxxxx 0xxxxxxx 00000yyy yyxxxxxx 110yyyyy 10xxxxxx zzzzyyyy yyxxxxxx 1110zzzz 10yyyyyy 10xxxxxx 000uuuuu zzzzyyyy yyxxxxxx 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx 编码格式转换(Encoding Form Conversion)

D37 编码格式转换:在一种Unicode编码格式的编码单位序列与另一种Unicode编码格式的编码单位序列间,直接界说的转换。 * 在Unicode标准完成中,一个典范的API在逻辑上,将输入的编码单位序列转化为Unicode标量值(码点),然后将标量值转化为输入的编码单位序列。但是,可以直接在不同编码格式间举行转换,以获取更高的听从。 * 具有一律性的编码格式转换历程应将任何情势不良的编码单位序列作为一个错误条件。

  • 3.2.8 Unicode编码方案(Unicode Encoding Schemes)

D38 Unicode编码方案:针对Unicode编码格式的一种指定的字节串行换,也可包含处理字节排序标志(byte order mark, BOM)的标准。

D39 UTF-8编码方案(UTF-8 encoding scheme):对UTF-8编码单位序列举行串行化的Unicode编码方案,字节序列与编码单位序列本身完全一律。

D40 UTF-16BE编码方案(UTF-16BE encoding scheme):将UTF-16编码单位序列串行化为big-endian格式字节序列的Unicode编码方案。

D41 UTF-16LE编码方案(UTF-16LE encoding scheme):将UTF-16编码单位序列串行化为little-endian格式字节序列的Unicode编码方案。

D42 UTF-16编码方案(UTF-16 encoding scheme):将UTF-16编码单位序列串行化为big-endian大概little-endian格式字节序列的Unicode编码方案。 在UTF-16编码方案中,与U+FEFF对应的初始字节序列,被表明为字节排序标志(BOM),用于区分两种字节排序。初始字节排序标明是big-endian排序,照旧little-endian排序。BOM不是文本内容的一局部。 UTF-16编码方案约莫以BOM开头,也约莫没有。但是,假如没有BOM,也没有高层协议指示,UTF-16编码方案的字节排序为big-endian

D43 UTF-32BE编码方案(UTF-32BE encoding scheme):将UTF-32编码单位序列串行化为big-endian格式字节序列的Unicode编码方案。

D44 UTF-32LE编码方案(UTF-16LE encoding scheme):将UTF-32编码单位序列串行化为little-endian格式字节序列的Unicode编码方案。

D45 UTF-32编码方案(UTF-32 encoding scheme):将UTF-32编码单位序列串行化为big-endian大概little-endian格式字节序列的Unicode编码方案。 在UTF-32编码方案中,与U+FEFF对应的初始字节序列,被表明为字节排序标志(BOM),用于区分两种字节排序。初始字节排序<00 00 FE FF>标明是big-endian排序,标明是little-endian排序。BOM不是文本内容的一局部。 UTF-32编码方案约莫以BOM开头,也约莫没有。但是,假如没有BOM,也没有高层协议指示,UTF-32编码方案的字节排序为big-endian。

  • 3.2.9标准排序举动(Canonical Ordering Behavior)

用于对组合字符序列提供无歧义的表明,以便能依照可预知的办法创建和互换包含组合字符的序列。正轨化是标准排序举动的另一个紧张使用。 在Unicode标准中,组合字符序列中字符的排序依照以下准则表明:

一切组合字符必需跟在所使用的基字符后方。

关闭的标志(enclosing mark)将包抄基字符以及标志之前的一切组合字符。也包抄它之前的其他关闭标志。

double diacritic的团结水平比其他非间距标志(nonspacing mark)要松。当体现时,double diacritic的地点在其他变音符之上,不包含关闭的变音符。

具有相反组合种别(combining class)的组合标志在誊写上的地点寻常是由所修饰的基字符向外分列。一些特定的非间距标志将改动却省的分列举动,与相邻的非间距标志并行分列。当并行分列时,编码的排序与誊写中占支配的排序有关。 假如组合字符的组合种别不同,将不会有体现情势或语义上的不同。

(1)组合种别(Combining Class)

D46 组合种别:分派给每个Unicode组合字符的数字值,用于确定与那些组合字符在排字上互相作用。

假如组合字符间在排字上互相作用,则具有相反的组合种别;不然,具有不同种别。

关闭字符和间距组合字符的组合种别与它们的基字符相反。

组合种别具有的特定命字没有特别的紧张性,只是用来比力对否相称,区分不同的组合种别。

(2)标准排序(Canonical Ordering)

对一个被分析的字符序列的标准排序,是依据组合种别对每个组合字符序列举行排序来完成的。字符序列的标准排序不反应任何言语准确性或偏好。

对被分析的字符序列D举行标准排序的算法为:

R1 对D中的随意字符x,界说p(x)为字符x的组合种别。

R2 假如在D中存在想的字符对(A,B),并且p(B)不为零,p(A)>p(B),则互换两个字符。

R3 反复实行R2,直到在D中没有产生任何互换。

(3)Conjoining Jamo Behavior

在Unicode标准中包含了一套预组合的Hangual音节,以及一套用于表现新鲜的韩文音节和古代韩文音节的jamo。

4. 完成指南

  • 4.1 编码转换(Transcoding to Other Standards)

寻常,在Unicode标准和其他编码标准间的映射必要经过表(table)来完成,而不是算法转换。使用表查找常常具有比简便算法转换更高的听从。

(1)多级表(Multistage Tables)

转换表必要空间。即使是很小的字符集也常常会映射到Unicode标准中几个不同的区块中,因此,最少在一个转换朝向上(从Unicode标准到其他编码标 准或相反),约莫会包含多至64K个项(针对BMP)或1,088K个项(针对全部编码空间)。有多个办法用于变小映射表的内存空间需求,这些办法不仅可 用于转换表,也可用于其他完成Unicode标准的表布局,包含字符属性数据、case映射等等。

(2)Flat Tables

假如磁盘空间不是成绩,假造内存体系可以为flat table安插可承受轻重的事情集,由于各字符的使用频率有很大不同,即使是小字符集也包含一些不常使用的字符。并且,必要转换为给定字符集的数据中的字符寻常不会来自Unicode标准中的一切区块。

(3)Ranges

提供一个经心创建的嵌套范围推断对表举行优化,约莫比力吸引人。但由于分支丧失,这种办法会对古代的高度流水线式的处理器体系形成不必要的功能泯灭。一种快 速的处理方案是接纳优化的两级表,可以在编码中不包含任何测试或分支指令。只管哈希表的速率不如多级表,但也可用于空间优化。

(4)两级表(Two-Stage Tables)

两级表现常用的一种变小表的轻重的机制。两级表使用一个指针和却省值的数组。假如指针为空NULL,查找前往却省值。不然,指针指向用于第二级查找的数值 块。关于BMP字符,依照高字节和低字节值来构造如此的两级表十分好效,第一级是由256个指针构成数组,每个第二集区块中包含256个值。关于增补字 符,应接纳不同的办法布局指针和二级数组,以便富裕思索增补字符在剩余编码空间中希罕的分布。

(5)优化的两级表(Optimized Two-Stage Table)

当任何区块相反时,对应的指针只需此中一个区块。对编码转换表而言,这种情况寻常显如今当区块中的字符仅仅映射到"却省"或"无法婚配"的字符时。不是使用 空指针NULL和一个却省值,而是创建了一个却省项的"共享"块。由于制止使用测试和分支,这种战略可以提供接近于简奇数租拜候的速率,却大大节流了存储 空间。

(6)多级表调治(Multistage Table Tuning)

给定一个具有随意轻重和内容的表,可以较容易的创建一个小的使用步骤,来盘算多级表的最佳级数和它们的宽度。经过调治级数和它们的索引指针数组的宽度,可以在表轻重安静均拜候时间之间举行折衷。

  • 4.2 ANSI/ISO C wchar_t

在ANSI/ISO C中,为安稳宽度的宽字符界说了典范wchar_t,ANSI/ISO C将宽字符集语义的界说留给了特定的完成。 wchar_t的宽度是由编译器指明的,可以仅有8位轻重。因此,必要在不同C或C++编译器间可移植的步骤不应该使用wchar_t存储Unicode文本。 对 于UTF-16的完成,可以使用宏macro大概典范界说typedef(如UNICHAR),编译为unsigned short大概wchar_t(依托于目标编译器安静台)。对UTF-32的完成可以使用编译为unsigned int或wchar_t的宏大概是典范界说。如此的选择使在不同的体系平台和编译此中可以准确编译。

  • 4.3 未知和短少的字符(Unknown and Missing Characters)
  • 4.3.1 保存的和私用的字符编码(Reserved and Private-Use Character Codes)

有两类码点,即使是完全的Unicode标准完成也无法准确表明: 被保存的码点; 在私用区中的码点。 一个完成不应试图去表明如此的码点。但是,在实践中,使用步骤必需处理为分派的码点或私用字符。比如,当使用步骤所处理的文本是由一个完成更新版本的Unicode标准的体系创建的,此中包含更多的分派字符。 对未知字符体现的选择包含将码点体现为四到六位十六进制数字,体现一个黑得或白的方块,针对保存字符和私用字符分散体现合适的字形,大概什么都不体现。一个完成不克不及删除如此的字符,也不克不及无目标地转换为其他字符。

  • 4.3.2 可表明但无法体现的字符(Interpretable but Unrenderable Character)

一个完成约莫吸收一个分派给Unicode字符的码点,但无法体现它,由于没有字体大概无法准确体现。 在这种情况下,完成约莫会对用户的扣问提供进一步仅限的反应,如对数据举行得当的排序,体现它的誊写体系,大概以却省放时体现码点。对无法体现的(但是已分派的)码点和未分派的码点,完成可以经过为无法体现的码点使用指示种别的不同字形表现。

  • 4.3.3 缺省的属性值(Default Property Value)

要使完成可以正常事情,必要把未分派的码点看作字符分派却省的属性值,由于种种算法都必要分派给每个码点的属性值来运作。这些却省值不是对一切未分派的码点都相反,由于码点中的某些范围必要不同的属性值以便与将来希冀的分派做到最大兼容。 除非被特指,却省属性值不是标准的,具有一律性的完成可以使用其他值。比如,代替缺省值,完成约莫使用以下端正,为一块未分派字符插进相邻已分派字符的属性值。 注意在两个朝向上最接近的已分派字符,假如它们处在相反的块中具有相反的属性值,则使用这些值。 从任一区块的界限开头,不休扩展到块内迩来的已分派字符处为止,使用区块中字符对应的属性值。 假如一切的码点完全位于空的或未分派的块中,使用对应属性的却省值。

  • 4.3.4 缺省的可忽略的码点(Default Ignorable Code Points)

一 般,在可支持字符集外的码点使用一个应变的字形体现,如一个黑方块。但是,格式和控制字符不应该由可见的字形(只管它们对其他字符的体现有影响)。除非对 于一些特定的处理,这些字符也被忽略,比如,字符ZERO WIDTH NON-JOINER在比力(collation)中忽略。为在不同版本的标准间确保最大水平的兼容性,范围U+2060到U+206F,U+FFF0到 U+FFFB,和U+E0000到U+E0FFF保存给格式和控制字符。在这些范围中的位分派码点应该在处理和体现中被忽略。

  • 4.4 处理UTF-16中的署理对(Handling Surrogate Pairs in UTF-16)

在情势精良的UTF-16中,在一个低署理码点之前只能是一个高署理码点,而不克不及是另一个低署理码点、一个非署理码点大概是文本的开头。一个高署理码点的后方也只能跟一个低署理码点,而不克不及是另一个高署理码点、一个非署理码点大概是文本的开头。 高署理码点和低署理码点被分派了不相交的编码单位,非署理的码点也不会使用这些范围内的编码单位值表现。因此,在情势精良的UTF-16中的每个编码单位必需只满意底下三个约莫的条件之一:

一个单一的非署理编码单位表现的码点范围是0到D7FF或E000到FFFF;

一个高署理码点表现署理对的第一局部;

一个低署理码点表现署理对的第二局部。

最多拜候两个编码单位,使用UTF-16编码格式的处理历程就可以表明任何Unicode字符。确定字符界限最多只必要扫描前一个或后一个编码单位,而不需思索其他局部。

只需完成不去除署理对中的任一编码单位,大概在署理对中两个编码单位间错误的插进另一个字符,就可以确保数据的完备性。并且,即使数据被毁坏了,错误也是局部的。 UTF-16具有十分有利的频率分布,在一切文本数据中的大大多局部中,署理对十分稀有,非署理码点将十分广泛。这不仅有利于变小由于处理变长编码而带来的功能丧失,也允许一些处理历程可以不合错误署理对接纳特别的利用,大概使用已有处理字符序列的机制来处理署理对。

完成必需在处理UTF-16文本时完全支持署理对。但是,完成中的单独的组件可以具有对署理对不同水平的支持,只需这些组件之间可以准确的组合和交换。对署理对不同水平的支持由两个主要方面决定:

完成对否表明增补的字符?

完成对否确保署理对的完备性?

Surrogate Support Levels Support Level Interpretation Interity of Pairs None No supplementary characters Does not guarantee Transparent No supplementary characters Guarantees Weak Some supplementary characters Does not guarantee Strong Some supplementary characters Guarantees

不支持署理对,完成果不会对任何增补字符举行表明,也不确保署理对的完备性。 纯透的署理对支持(transparent surrogate support),用于如此的组件,如编码格式转换,它约莫完全确保对署理对的准确处理,但不表明任何增补字符。也实用于低层串处理利用的组件,一个 Unicode串只是简便地作为编码单位的数组而掉臂它们的署理形态,不合错误串举行表明。

不富裕的署理支持(weak surrogate support)只准确地处理那些对应可表明字符的署理对,约莫调用的组件被确保不会转达无法表明的字符。

支持署理对的战略(Strategies for Surrogate Pair Support) 处理Unicode标准中高等特性的一些完成可以很容易地被改良,来支持UTF-16的署理对。比如: 在文本比力(text collation)中可以把署理对作为"组合字符"来处理。 文本的输入可以使用一次按键产生两个Unicode码点的键盘来完成,就如一次ENTRE键可以天生CRLF大概在阿拉伯键盘上的"lam-alef"可以天生两个字符lam和alef的序列。

文本截断(truncation)可以使用与确保组合标志紧跟基字符相反的机制。 假如文本编纂器可以确保插进点(insertion point)位于字符界限,就可以制止用户毁坏文本。只需使用文本元素界限,低层的串处理步骤(如wcschr)就不必举行修正。实践上,仅有某些高层的 处理必要注意署理对;底层的例程可以持续使用对16位编码单位利用,而不需特别对待署理对。

  • 4.5 处理数字(Handling Number)

在Unicode 中,有一些字符集实用于表现不同誊写体系中的十进制数字。在数字上,表明这些字符的体系必需提供准确的数字值。好比,在数字上,对序列表明,具有值20。

当从二进制的数字值转换为可视的情势时,可以从不同的誊写体系中选择数字。 ASCII数字的全角变形(fullwidth)仅是通常数字的兼容变形,应作为寻常的西文数字对待。

罗马数字和东亚的表意字符数字也是十进制的数字誊写体系,但它们在情势上不是以10为基数的数字体系。因此,不成能接纳一对一的办法转换成像123456.789的情势。

使用表意字符,也约莫以两种办法誊写数字。如数字1,234可以表现为"一千二百三十四"或"一二三四"。

在数字剖析使支持这些数字意味着完成必需能区分这两种情况。 偶尔分数字必要剖析,但它们并不是数的一局部。比如由字母和数字构成的标示符。 仅有在另一层上(照完成一个完备的数学公式剖析器),对上标(superscripting)的表明才是至关紧张的。

  • 4.6 正轨化(Normalization)

(1)可选择的拼写(Alternative Spelling)

在Unicode标准中对最常用的一些增重音符的字符分派明白的编码。这些字符也可以经过组合取得,关于增重音符的字母,可以由基字符和非间距标志(nonspacing mark)组合而来。 Unicode标准提供对可由基字符加一个或多个非间距标志组合而来字符的分析。分析映射与特定Unicode标准的版本有关。

(2)正轨化(Normalization)

体系约莫会将Unicode编码格式的文本正轨化为特定的序列,如将组合字符序列正轨化为由预组合字符的序列,大概相反。 无法处理非间距标志的体系,可以正轨化为预组合字符,实用于大大多基于拉丁语的古代言语。关于无法处理的组合字符,体系可以使用交换体现办法,最少在体现上表现组合。 对可以处理非间距标志的体系,实行正轨化消弭预组合字符约莫会有效,使体系对组合字符有一致的表现,坚持对这类字符处理的一律性。

  • 4.7 紧缩(Compression)

使用Unicode字符编码约莫会增长用于保存文件文本局部的存储和内存空间。因此,对Unicode文件或串举行紧缩是一个很好的选择。紧缩屡屡创建一个更高层的协议,并且依托于所使用的紧缩办法的知识举行互换。

  • 4.8 换行的准则(Newline Guidelines)

换行符在不同的平台上表现为:carriage return(CR)、line feed(LF)、CRLF,或next line(NEL)。不仅换行符使用不同的字符表现,并且在相反平台上,它们也具有不明白的举动。当转换字符集编码时,这些字符通常被直接转换为对应的 Unicode码点。这意味着,即使是处理纯Unicode文本的步骤也必需处理这些成绩。特别是随着Web的显现,在一台机子上的文本约莫具有不同的来 源,将惹起很大成绩。 换行符用来明白指示行的界限。

  • 4.8.1 界说(Definitions)

Hex Values for Acronyms

Acronym Name Unicode ASCII

CR carriage return 000D 0D

LF line feed 000A 0A

CRLF carriage return and line feed 000D,000A 0D,0A

NEL next line 0085 85

VT vertical tab 000B 0B

FF form feed 000C 0C

LS line separator 2028 n/a

PS paragraph separator 2029 n/a

在Unicode标准中,没有正式地分派控制字符,而是为种种7位和8位字符编码标准中使用控制字符提供相应的码点。确保了Unicode标准与其他编码标准的干系性和互相映射。 缩写NLF(newline function)表现针对一个新行分开符的寻常控制功效。

  • 4.8.2 背景(Background)

段落分开符(paragraph separator)

用于指示段落之间的分开。

行分开符(line separator)

指示在何处举行断行,特别是在一个段落中。

纪录分开符(record separator)用于分开纪录。比如,当互换表格式数据时,一种平凡的格式是使用TAB分开单位和在一行单位后使用CRLF。只管这种功效与行分开不是恰好相反,但使用了相反的字符。

NLF开头时作为行分开符。如今,在一些简便的文本编纂器中还作为行的分开符。随着平台和步骤开头使用主动分行举行字处理,这些字符被用于表现段落分开符。 一旦NLF被用来表现段落分开符,在一些情况下,另一个控制字符就被作为行分开符使用。比如,在Microsoft Word中,就使用vertical tabulation(VT)。

  • 4.8.3 发起(Recommendation)

在Unicode 中,界说了两个明白的分开字符:U+2029 PARAGRAPH SEPARATOR(PS)和U+2028 LINE SEPARATOR(LS)。在Unicode文本中,应该在所表达功效明白的场合使用PS和LS字符。不然,当从其他字符集转换为Unicode时,当 表明文本中的字符时,和当从Unicode转换为其他字符集时,使用以下端正处理NLF。

即使完成晓得在一个特定的平台上用哪个字符表现NLF,在输入息争释时CR、LF、CRLF和NEL应该被相反对待。只需在输入时,才有必要举行区分。

(1)从其他字符编码集转换

R1 假如晓得NLF的确切的用法,则转换为LS或PS。

R1a 假如不晓得NLF的确切用法,则映射为与平台对应的NFL。

(2)表明文本中的字符

R2 总把PS表明为段落距离,把LS表明为行距离。

R2a 在字处理中,把任一NLF都表明为PS。

R2b 在简便文本编纂中,把任一NLF都表明为LS。 R2c 在剖析中选择最宁静的表明。 比如,对R2c,触及断句启示端正的完成会依照以下办法,将NLF宁静的表明为LS:

当一个NLF应是PS时,假定把它表明为LS。由于大多段落总是以标点标记完毕,这只会在一局部情况形成对句子界限的错误识别。

当一个NLF应是LS时,假定把它表明为PS。在这种情况下,行分开符将是句子断开,对断句启示端正带来很大错误。

(3)转换为其他字符编码集

R3 假如已知转换的目标,依据目标协议,得当地对NLF、LS和PS举行映射。 比如,当映射为Microsoft Word对文档的内里协议时,LS将映射为VT,PS和其他NLF将映射为CRLF。

R3a 假如不晓得转换的目标,将NLF、LS和PS映射到平台的换行协议。

(4)输入和输入

R4 函数readline应该在碰到NLF、LS、FF或PS时中止。在典范的完成中,不包含中止地点的NLF、LS、FF或PS。 由于分开符会丧失,对这种readline函数的使用仅限于与分开符的典范不关的文本处理。

R4a 函数writeline应该依据(3)中的协议转换NLF、LS和PS。

(5)页面分开符

FF寻常用作页面分开符,在文本中应该依照情况表明。当在屏幕上体现时,在分开符后的文本会被欺压放如下一页。它与段落分开符不关:一个段落可以在一页开头本人一页中持续。除非是在页面中体现,在大大多剖析历程和readline中,与LS的表明相反。

  • 4.9 正则表达式(Regular Expressions)

面向字节的正则表达式东西必要扩展以准确处理Unicode。底下是扩展所触及方面:

Unicode是一个很大的字符集,只实用于处理小字符集的正则表达式东西约莫无法调停。 Unicode包含多种言语,它们具有与英语或其他西欧言语十分不同特性。

  • 4.10 纯文本中的言语信息(Language Information in Plain Text)
  • 4.10.1 言语标志的必要

在纯文本数据中嵌入言语信息的必要常常被夸大。一些平凡利用,如比力(collation)很少必要这些分外信息。 然 而,言语信息对某些利用十分有效,如对一个殽杂言语的文档实行拼写反省大概连字(hyphenating)。关于为无格式文本选择却省字体也十分有效,例 如日笔墨体中的省略标记具有与英笔墨体不同的外表。如今的字体和布局(layout)武艺基于言语信息产生不同后果。只管言语信息关于实行文本-语音转换 (text-to-speech)利用有效,但如今的文本-语音转换软件都必需对文本实行十分繁复的语法分析,因此确定言语的分外事情就不那么紧张了。 言语信息可以使用带外信息(out-of-band)或内嵌标志(inline tag)表现。在内里完成中,通常使用带外信息,保存在与文本并联的数据布局中,而不是嵌入到文本数据中。带外信息不影响对文本的正常处理,还可以轻松的支持对文本的利用。

  • 4.10.2 言语标志与汉字一致

对Unicode中汉字一致的一个稀有曲解是以为没有言语信息就无法准确体现汉字字符。但是,汉字一致的目标和办法是确保文本可读。只管必要添加字体、轻重、宽度和其他格式规格,以便在源和目标机器上准确产生相反的外表,但在没有这些规格时,纯文本也能确保可读。 由于不同国度所使用的一致的汉字间的不同,都仅限于格式上的厘革,不会惹起Unicode中的杂乱。在Unicode中的汉字一致不会使读者音唯一不同的字体体现而无法识别一个字符。假如准确的字体信息很紧张,最好使用格式文本。

  • 4.11 编纂和选择(Editing and Selection)

一律的文本元素(Consistent Text Elements)

从用户的角度,文本的基本表现不是所体贴的,但紧张的是,编纂接口必需对用户所以为的字符提供一个一致的完成。用户渴望在鼠标选择、朝向键挪动、退格等利用 中,这些字符体现得像一个个单位。比如,当完成这些举动后,对一个表现为基字符加非间距组合标志序列的增重音符字母,使用右移朝向键时,逻辑上会从基字符 的开头跳到最初一个非间距字符后方。 在词中的编纂和选择,寻常有三品种型的界限(boundary)。

簇界限(cluster boundary)

随意界说的簇界限约莫会显如今像梵文(Devanagari)如此的誊写体系中,选择利用约莫会使用于音节大概音节的一局部。在这种情况下,组合字符序列,如ka+vowel sign大概团结的簇ka+halant+ta,作为单一的单位选择。

堆叠字符界限(stacked boundary)

堆叠字符界限寻常比簇界限更细。独立的元素(如梵文vowel sign a)可以不受束缚的选择,但是任何堆叠在一同的字符(包含垂直连字符,如阿拉伯文中的lam+meem)只能作为单一的单位选择。

原子字符界限(atomic character boundary)

原子字符界限的使用最接近于单个Unicode字符的选择。但是,大大多如今体系都接纳某种矩形加亮的办法表现选择利用。这种办法限定了编纂利用的一律性, 由于一些字符序列不是从行的起始处成直线地提高。当字符堆叠时,两种机制被用于对局部选择地体现:直线的和非直线的界限。

直线的界限(linear boundary)

使用直线界限,将构成字形的全部宽度都归属于序列的第一个字符,以为其他字符没有宽度。 这是最简便的一种机制。它的优点是只必要很少的分外完成事情。它的缺陷是选择窄字符变得十分困难,更不必说零宽度的字符。必要用户恰好从非间距标志右方开头选择,并且恰好拖到右方。假如有多个非间距标志,它也不允许对单个标志举行选择。

非直线的界限(nonlinear boundary)

使用非直线界限把任何堆叠字符分红各个局部。可以经过对多个矩形加亮,大概对单个字符着色的办法举行表现。 注意到,经过更多的利用,一个预组合的字符在删除利用中可以体现得像一个具有原子字符界限组合字符序列一样。这个历程包含动态地取得字符的分析表现,取得用作模仿的组件。

在大多体系中,字符时文本中最小的可寻址单位,以是选择利用和属性分派利用(如字体、颜色、字符间距等)都在字符的基本上实行。关于预组合地字符无法模仿这种可寻址性,体系地修正一切文本编纂东西来对字符的一局部举行寻址,会十分低效。 由 于文本元素不具有一个单一的看法,因此,对字符界限的编纂也没有一个一致的看法。在不同情况下,用户约莫会在编纂历程中使用不同水平的粒度轻重。可以思索 两种办法:起首,用户约莫设定对字符界限的一个全局偏好;第二,用户约莫有可选的下令机制,如Shift-Delete,可以提供对却省形式更细(或更 粗)的控制。

  • 4.12 处理非间距标志的战略

依据一下战略,开发者可以完成对非字符间距好效和高效使用的体系和例程。开发者也可以选择实用于绝大大多已有体系的最小限制的武艺,和实用于要求更苛刻的情况的繁复武艺,如高端的桌面出书。

在这里,术语非间距标志(nonspacing mark)和组合字符(combining character)可以互换使用。偶尔会使用术语diacritic、accent、stress mark、Hebrew point、Arabic vowel等,而不好坏间距标志(它们表现特定典范的非间距标志)。

为支持非间距标志,只必要相对较小数目标完成特性。存在多种约莫条理的完成。一个最小的体系可以产生较好的后果,并且相对容易完成。要求大大多特性地体系,只是对已有软件地简便修正。 由于有一些言语要求非间距标志,如Arabic、Hebrew和印度次大陆的言语,已有一些可以处理这些字符的体系,可以使用已有履历来天生处理Unicode标准中这些字符的多用处软件。

体现(rendering)

一局部确定的组合字符序列可以经过简便的交换来好效体现。当碰到一个有基字符加一个或多个非间距组合标志构成的序列时,可以使用表现组合情势的字形举行替 换。在简便地字符体现中,一个非间距组合标志不增长宽度,一个组合字符序列的具有与基字符相反的宽度。当截断串时,从开头处开头向后实行截断总是最容易。 后续的非间距标志将不会与前方的基字符分开。 一个更繁复得体现体系会思索使用非间距标志时对宽度和字距更渺小的调停,大概组合字符序列具有与基字符不同宽度。对大大多使用而言,如此地体现体系并不是必需的。 其他处理:准确的多言语比力例程也必需可以把字符序列作为一个字符比力,大概把一个字符看作是一个字符序列。只需提供了得当的数据,这些例程也能处理组合字符序列。当查询串时,要反省目标串中约莫会影响最初一个婚配字符表明的附加非间距标志。 断行算法寻常使用形态机,确定词间的中缀。如此的算法可以很容易地改良,来制止将非间距标志从基字符分开。

键盘输入(Keyboard Input)

用于组合字符序列输入的一个稀有完成,是使用所谓的dead key。这些键与打字机天生如此序列所使用的机制婚配,经过在非间距标志之后键入基字符。在盘算机的完成中,当按下针对重音符的dead key时键盘进入一种特别的形态,仅有当键入一些仅限数目标"合法"基字符之一时产生一个预组合的字符。依据必要,可以改良体系来天生组合字符序列大概预 组合的字符。只管打字员,特别是使用Latin誊写体系的,是针对这类体系培训的,但是在Unicode标准中一些誊写体系(包含Latin)约莫会依据 誊写的排序来完成,用户起首键入基字符,自后跟偏重音符或其他非间距标志。 在誊写排序的情况下,每一次键入都在屏幕上产生一个不同的天然厘革。要给已有的字符添增重音符,用户必要把插进点移到字符后在键入重音符。

截断(Truncation)

有两品种型的阶段:依据字符数目截断和依据体现宽度截断。依据字符数目截断约莫带来数据丧失,也可以是无丧失的。 依据字符数目举行截断使用在,由于存储限定,仅有仅限数目标字符可以放入某地区;也用于,为了传送和其他目标将文本插进缓冲区中。在后一种情况下,假如在处理前缓冲区中的数据可以无缝的重新组合,大概事后反省一下约莫显现的跨缓冲区组合字符序列,就可以做到不丧失数据。 当调停数据以顺应有现长度的地区时,一些信息将会丧失。在文本界限上举行截断(比如,在组合字符序列的最初大概在最初一个词界限)通常比在最初一个码点后截断更可取。 依据体现宽度截取用于仅限范围内的可视体现。在这种情况下,截断是依据后果串的宽度而不是字符的数目。在简便的体系中,依据宽度截断很容易,从末了处开头向后利用减去字符的宽度。由于后续非间距标志对串的尺寸没有奉献,最初后果不会把非间距标志与它们的基字符分开。 假如文本情况会更繁复,字符的宽度约莫会依托上下文情况,由于字符间距调停、连字或上下文信息等的作用。对这种体系,一个组合字符的宽度约莫会与一个单独的窄字符(如i)的宽度不同。处理这种情况,必需对截断后果举行核对。 一个不同的选择是在图形上对字符举行修剪。但不幸的是,后果约莫很丢脸。并且,假如修剪显如今字符之间,约莫不会给出任何天下反应表现字符被删除了。

  • 4.13 非间距标志的体现(Rendering Nonspacing Marks)

在这里假定使用均衡字体(proportional font),单个字符的宽度可以厘革。关于等宽字体(monospaced font),可以使用种种武艺,但寻常而言,关于这种字体的大多誊写体系,约莫仅有一种准确的体现外表。 当 体现的序列中包含多于一个的非间距标志时,却省情况下,非间距标志从基字符向外堆叠。即,假如亮格非间距标志显如今基字符的之上,则第一个非间距标志位于 基字符外表,第二个非间距标志为与第一个标志外表。假如亮格非间距标志显如今基字符的之下,则第一个非间距标志位于基字符底下,第二个非间距标志为与第一 个标志底下。 这种却省举动约莫会依据排字上的偏好,大概某个特定誊写体系中对多个非间距标志的特定正字法处理,而改动。

后撤的体现(fallback rendering)

有几个办法可用于处理在一个安稳的可体现聚集外未知的组合字符序列。 一种办法是Show Hidden,经过先体现基字符再把非间距标志作为单个单位体现,来表现无法刻画序列。 另一种办法是Simple Overlap,将堆叠的零宽度非间距标志安排在却省的安稳地点处,寻常所安排的地点例约莫的基字符较远。只管体现后果关于一些字母而言没有吸引力,但在仅有一个非间距标志的情况下,后果寻常照旧可以识别的。 在一个退步的情况下,一个非间距标志作为文本的首字符显现,大概被行分开符、段落分开符或其他惹起地点分开的格式符从它的基字符分开。这种后果称为不良的组合字符序列。不良的组合字符序列在体现时,看作是以一个空格作为基字符。

双向定位(bidirectional positioning)

在双向文本中,非间距标志与它们的基字符一同重新排序。即视觉上,在使用双向算法之后它们使用于相反的基字符。

调停(justification)

典范地,对文本的完全调停要给间距字符(space character)添加分外的空间;但是,假如仅有很少(或没有)间距字符,一些体系会在字符间添加分外的字距离空(letterspacing)。假如在文本中包含零宽度的非间距标志,则必要对该历程举行改良。 由于非间距标志总是跟随它们的基字符,准确的调停历程应该仅有当第二个字符是一个基字符时才会在字符见添加字距离空。

标准等价性(Canonical Equivalence)

在体现多个重音符时,必需思索标准等价性,以便使任两个标准等价的序列体现后果相反。这一点在当标准排序与习气的键盘输入排序不相反时特别紧张,如具有元音 标记的阿拉伯文和使用点的希伯莱文。在这些情况下,体现体系取得的是典范的键入排序大概是颠末正轨化(normalization)的标准排序。 体现体系应该处理组合标志的任何具有标准等价性的序列。这不会有功能成绩,由于对组合标志重新排序所需的时间与其他体现事情的耗时比拟微不敷道。 一个体现体系,在必要时,可以在内里对标志重新排序,只需后果序列是标准等价的。

定位办法(Positioning Methods)

有一些办法可用于定位非间距标志,使它们干系于基字符和前一个非间距标志(假如有的话)的地点准确。

使用连字(positioning with Ligature)

一个安稳范围的组合字符序列可以使用相对简便的交换来好效体现。当字形可以表现一个序列<基字符,非间距标志>时,使用这个字形交换组合情势。 由于非间距标志的扩展宽度为零,组合字符序列将主动具有与基字符相反的宽度。跟繁复的文本体现体系约莫会接纳进一步的办法来处理一些特别情况,如组合字符 序列的紧排(kern)大概宽度与基字符不同。 使用连字约莫是支持非间距标志最简便的办法。关于较小的安稳字集,如那些对应ISO/IEC 8859-1(Latin-1)重预组合字符的,可以直接接纳该办法。由于组合字符序列几乎总是具有与基字符相反的宽度,对这些字符的体现、丈量和编纂与 寻常连字的情况比拟都更容易。 假如组合字符序列不克不及构成一个连字,就必要接纳以下两种办法之一。假如这些办法都不成用,则使用后撤的办法。

  • 依据上下文布局定位(positioning with contextual forms)

处理非间距标志定位的一个较通用的办法是使用上下文的布局。在这种情况下,有几个不同的字形对应于重音符的不同地点。依据大抵的外形和宽度,基字形(基字符的字形?)通常分红数目较小的一些种别。依据基字形的种别,为非间距标志选择一个特定的字形。 在寻常情况下,可以从一些具有不同高度的字形中举行选择,以便堆叠字形。这种办法可以与使用连字的办法团结使用,就可在特定情况下,使用连字天生更高的变形。

使用加强的字距调停(positioning with enhanced kerning)

第三种用于定位读音标记的武艺是对常规的字距调停(水平的和垂直的)的扩展。典范地,字距调停历程唯一对字形映射一个地点偏移量。比如,在词语"To"中,"o"应该向"T"底下靠一点。这种体系的扩展则分散映射一个垂直的和水平的偏移量。 为了针对寻常情况可以好效使用,字距调停历程也必需可以处理比简便字符对更繁复的情况,如在一个基字符后约莫有多个读音标记。 使用加强的字句调停武艺举行定位,也可以和使用连字的办法团结运用。

  • 4.14 定位文本元素界限(Locating Text Element Boundaries)

Unicode 编码的文本串常常必要被分析为文本元素。文本元素的寻常例子包含字符、词、行和句子。文本元素的准确确定约莫会依据地区而厘革。但要与用户的了解相婚配并 不是总能到达的,由于文本本身并不总是包含充足的信息用于明白决定界限。比如,句点"."(U+002E FULL STOP)的使器具有歧义,有使用于表现句子完毕,偶尔用于缩写,偶尔则用于数字。但是,在大多情况下,文本界限可以符实用户的了解。

  • 4.15 标识符(Identifiers)

Unicode 标准的完成面临的一个稀有职责是提供针对标识符的剖析东西。为了促进在基于Unicode字符的剖析器中对标识符的标准化处理,这里针对标识符语法的界说 提出一套引导办法。这些引导办法并不比平凡步骤计划言语中端正更繁复,只不外包含了更多具有不同典范的字符。

基于属性的标识符语法(property-based identifier syntax)

这 里提供的正式语法就是要明白,一个标识符是由一个字母大概一个表意字符开头,包含随意数目标字母、表意字符、数字或下划线的字符串构成的。每种步骤计划语 言标准都有本人的标识符语法,不同步骤计划言语对ASCII范围内特定字符的使用有不同的商定。对这些语法举行扩展以具有Unicode完成的全部举动, 只必要讲这些特定端正与底下提供的样本语法团结。 为了准确的涵盖Unicode标准,样本标识符语法中的改造之处包含: 团结对组合标志的得当处理。 允许有布局和格式控制字符,在剖析标识符时忽略。

组合标志(combining marks)

标识符语法中必需思索组合标志。由一个基字符跟随多少组合标志构成组合字符序列对一个标识符而言是好效的。 关闭的组合标志被扫除在的语法界说外,由于由它们和字母所组合取得的组合字符不是这些标识符好效的构成局部。

布局和格式控制字符(layout and format control character)

用于控制组合举动,双向排序控制和可选体现格式的Unicode字符,被明白界说为不影响中缀举动。不像空格符或其他分开符,它们不必来指示词、行或其他单 元的界限。因此,为了标识符界说,将它们明白包含在内。一些完成约莫选择过滤掉这些可忽略字符,这种办法的优点在于两个体现相反的标识符更约莫是相反的。

特别字符调停(specific character adjustments)

特别的标识符语法可以被看作是基于字符属性对平凡语法的少数修正。比如, SQL标识符允许下划线作为标识符的一局部(但不克不及作为开头字符);而C标识符允许既下划线作为标识符的一局部也可以作为标识符的开头字符。 可以思索扫除在标识符外的字符聚集包含一切兼容映射具有标志的字符。 语法例则(Synactic Rule) := (|

)*

Sytactic Classes for Identifiers

Syntactic Class Properties

General Category = L or Nl, or

Other_ID_Start = true

General Category = Mn, Mc, or Nd, Pc, or Cf

可选发起(Alternative Recommendation)

使用语法种别不敷之处是,用于具体界说的存储空间,以及随着新版本Unicode标准添加的新字符无法被已有的剖析器识别。也就是说,无法做到向上兼容。 处理该成绩的一个办法是,不去界说允许使用的码点聚集,而是将一个较小的安稳的码点聚集保存给语法使用并且允许使用其他任何码点(包含非分派的码点)用作标识符的一局部。依照这种标准编写的剖析器对任何版本的Unicode标准得体现相反。 这种办法的缺陷是标识符中局部约莫是没故意义的东西,由于将词汇分类与人类的可了解性分开了。但是,可了解性可以经过其他办法处理,如使用用法指南限定使用故意义的术语。比如W3C指定的标准XML 1.1。

经过增长不允许使用字符的聚集,可以取得针对标识符较直观的发起。这种办法使用Unicode标准一个特定版本中关于标识符种别的一切标准,并且永久不允许 使用该版本中不保举用作标识符的字符。该版本Unicode标准中没有分派的一切码点可用于标识符,以前思索到将来对版本的添加。这种办法确保了向上兼容 的标识符安定性,以及将字符公道地区分为具有或不具故意义的标识符构成。 可以对克制使用的码点列表举行一些分外的扩展,来进一步限定不公道的标识符。

  • 4.16 排序和查找

排序和查找利用局部相一律,都要完成互比拟力项的等价水平推断。在查找利用中,等价界说项对否婚配;在排序利用中,等价影响项在有序行列中的临近。等价的确 定常常依托于使用和言语,但关于支持Unicode标准的完成而言,排序和查找必需思索到Unicode字符的等价性和标准排序。

与言语文明有关的排序和查找

排序排序随着文明的不同而厘革,并且一些特别的使用必要厘革。排序的排序可以依据词大概句子,区分轻重写大概不分轻重写,忽略重音符大概不忽略;也可以是依 据语音,大概基于字符的外表,好比使用笔划和部首对东亚的表意字符排序。对汉字的语音排序必要使用词语的查找辞书,大概是可以维持文本中词和干系语音拼写 的特别步骤。 言语不仅决定使用哪一种排序,并且决定什么构成排序的基本元素。比如,瑞典语中将U+00C4 LATINE CAPITAL LETTER A WITH DIAERESIS作为一个单独的字母,在字母表中排在z之后;但是,在德语中,则作为ae大概识跟随在a之后的其他重音情势。西班牙语在传统上将连字 ll看作在l和m之间的字母来排序。 因此,不成能在编码时以某种排序安插字符以便经过简便的二进制串比交代可以天生渴望的排序,也不成能提供单级的排序权重表。后者意味着字符编码细节对文明上渴望的排序只具有直接的影响。

与言语不关的排序

在一些情况下,使用步骤约莫必要举行与言语不关的排序,即对文本数据排序,而不思索针对串怎样排序的与言语干系的文明希冀。比如,一个暂且的索引约莫只必要 以某些界说精良的排序分列,但排序的准确细节并不紧张大概对用户不偏见。但是,即使在这种情况下,也必要注意一些成绩。

起首,三种Unicode编码格式的二进制排序存在一些渺小的不同。只必要对Unicode串举行二进制比力的完成必需思索这一点,不至于在使用不同编码格式的使用步骤间惹起互利用成绩。 一些排序大概查找使用,即使不体贴排序中与言语干系的不同,也要求与轻重写不关。传统上,实行与轻重写不关比力的完成是经过在二进制比力前将两个串都转换为大写的情势来完成的。但是,这种办法寻常不克不及扩展到Unicode标准中的一切字符。 查找 查找也受比力利用中一些相反的成绩影响。也增长了其他一些特性,如只婚配词(即在婚配的两边都是词的界限)。一种武艺是针对一个弱婚配举行快速查找。当发觉一个候选婚配时,依据其他标准(如婚配变音符,词婚配,轻重写婚配等等)。 当 查找串时,必需反省目标串中尾随的非间距标志,约莫影响最初一个婚配字符的表明。也就是,查找"San Jose"约莫会在串"Visiting San José, Costa Rica is a ..."发觉一个婚配。假如要求准确的婚配,则应该反对该婚配。假如只需求弱婚配,则可以承受该婚配,但是在前往目标字串的地点和长度时必需包含尾随的非 间距标志。 弱等价的一个紧张使用是与轻重写不关的检索。一些传统的完成将查找串和目标串都映射为大写。但是,轻重写映射是依托言语的,并且不是没有歧义。 由于从外部字符集的错误映射,产生一个干系成绩。为了处理这个成绩,可以将用户易搞混的字符归为一个弱婚配类。这种办法在查找定名的文件或其他目标时可以更好的满意用户的语气。

次线性查找(Sublinear Searching)

使用比力信息,经过硬算(brute force),国际化的查找是约莫的。但是,这种战略在最坏情况下必要O(m*n)算法,在寻常情况下必要O(m)算法,n是所寻觅的形式中字符的数目,m是目标串中的字符数。 一些算法可以使用次线性的算法对简便文本举行快速查找。经过在目标串中跳过字符,这些算法在通常情况下的繁复度仅有O(m/n)。 在次线性查找中接纳与言语有关的比力算法的主要成绩,与多映射和可忽略有关。别的,次线性算法事后盘算信息表。

  • 4.17 二进制排序

假如比力文本对终极用户是可见的,就应该使用准确的言语排序。但是,在有一些情况下,只必要一个快速的有精良界说的排序。在这种情况下,可以使用一个二进制排序。

Unicode 中的一切编码格式并没有相反的二进制排序。UTF-8和UTF-32的数据以码点排序排序,而UTF-16的数据(码点高于U+FFFF)则不是。并且, 当UTF-16或UTF-32数据使用某个Unicode形式序列化,并以字节比力时,取得的字节序列约莫具有也约莫没有相反的二进制排序,由于互换字节 排序将影响数据的大要排序。由于这些要素,UTF-16BE、UTF-16LE、UTF-32LE编码方案下的文本不是以码点排序排序。

寻常,Unicode文本的却省二进制分列排序应该是码点排序。但是,约莫必要与特定编码格式中的编码单位排序(或是特定编码方案的字节排序)婚配,以便完成不同使用中使用的排序。

  • 4.18 Case Mapping

Case 是特定字母表中字符的一个标准属性,好比Latin、Greek、Cyrillic、Armenian,和古时格鲁吉亚文,字符被以为是单个字母的变体。 这些变体在外形和轻重上约莫区别很大,称为大写字母和小写字母。寻常大写字母比小写字母大。具有轻重写差别的字母表称为bicameral;没有的则称为 unicameral。

为了兼容性还包含了某些组合字符,如U+01F1 "DZ" LATIN LETTER DZ,就有了第三种形态,称作titlecase,用于当词的第一个字符被大写时。这种字符的一个例子是U+01F2 "Dz" LATIN CAPITAL LETTER D WITH SMALL LETTER Z。

因此,三种形态情势为UPPERCASE、Titlecase和lowercase。 术语"titlecase"可用于指词语,它的第一个字母是一个大写字母大概是titlecase字母,其他字母为小写。但是,并不是一切在文档标题中的词大概句子中的第一个词都是titlecase。 决 定哪一个词是titlecase依托于言语。比如"Taming of the Shrew"在英语中是得当的大写,但"Taming Of The Shrew"不是。并且,决定什么真正构成一个词是与言语干系的。比如,l'arbre在法语种约莫被以为是两个词,但can't在英语种被以为是一个 词。

Case Mapping的困难 一旦字符集超出了ASCII的范围,case mapping就会有一些困难。 在大多情况下,titlecase与uppercase相反,但并不总是如此。比如,U+01F1 "DZ" capital dz的titlecase是U+01F2 "Dz" capital d with small z。 case mapping约莫天生与源串的长度不同的串。比如,德笔墨符U+00DF LATIN SMALL LETTER SHARP S在转换成大写时扩张成两个字符的序列"SS"。这种情况也显如今没有预组合字符的情况下。 由一些字符必要特别的处理,如U+0345 combining iota subscript。 依托上下文情况,字符也约莫有不同的case mapping。比如,U+03A3 GREEK CAPITAL LETTER SIGMA,当后方跟随其他字母的时,对应的小写字符为U+03C3 GREEK SMALL LETTER SIGMA;没有跟其他字母时,对应小写字符为U+03C2 GREEK SMALL LETTER FINAL SIGMAL。

字符的case mapping约莫依托于地区。 由于一些字母实践上不分轻重写,没有婚配的大写情势,因此,将一个串转换为大写的历程并未料味着不包含任何小写字母。

可逆性(Reversibility) 必需注意到,没有case转换利用时可逆的。比如:

toUpperCase(toLowerCase("John Brown")) -> "JOHN BROWN"

toLowerCase(toUpperCase("John Brown")) -> "john brown"

甚 至另有一些单个词,像意大利语中的vederLa或英语中的名字McGowan,既不是大写,也不是小写或titlecase。这种情势偶尔称作 inner-caps,通常用于步骤计划和Web称呼。一旦串"McGowan"被转换成大写、小写或titlecase,就不成能经过另一个大写、小写 或titlecase利用恢复原样。也存在单个的字符没有可逆的映射,如希腊文中的sigma。 关于使用单个下令键构成的序列在不同case间转换所选择内容的字处理软件,发起保存初始串,并且可以经过键序列前往初始串。用户界面要天生以下对一系列下令键呼应的后果。注意,初始串每隔四次就会被存储。

1. The quick brown

2. THE QUICK BROWN

3. the quick brown

4. The Quick Brown

5. The quick brown

在字处理软件中,大写、小写和titlecase可以使用字符典范来表现。去除字符典范,就将文本规复为初始形态。但是,假如接纳这种办法,任何拼写反省软件必需注意case典范,以便可以对真正的外表举行反省。

不分轻重写的婚配(Caseless Matching)

不分轻重写的婚配是使用case folding完成的,该历程将串映射为一种消弭了轻重写差别的标准情势。Case folding顾及到查找中的不分轻重写的快速婚配,由于只必要二进制比力。它不仅仅是只转换为小写情势。 通常,初始的串不会被转换的串交换,由于如此的交换约莫会抹掉紧张的信息。比如,名字"Marco di Silva"转换为"marco di silva",丢失了关于哪个字母是大写的信息。

在Unicode Character Database(UCD)中的文件CaseFolding.txt用于实行与地区不关的case folding。该文件是经过单字符映射和多字符映射,从UCD中的case mapping天生的。它将一切具有不同case情势的字符转换成一个平凡情势。对两个串举行不分轻重写的比力时,可以使用这些数据对串举行转换,在使用二进制比力。

声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。