【组合字符和预组字符】

2023-11-10

什么是组合字符?

UCS里有些编码点分配给了 组合字符.它们类似于打字机上的无间隔重音键. 单个的组合字符不是一个完整的字符. 它是一个类似于重音符或其他指示标记, 加在前一个字符后面. 因而, 重音符可以加在任何字符后面. 那些最重要的被加重的字符, 就象普通语言的正字法(orthographies of common languages)里用到的那种, 在 UCS 里都有自己的位置, 以确保同老的字符集的向后兼容性. 既有自己的编码位置, 又可以表示为一个普通字符跟随一个组合字符的被加重字符, 被称为 预作字符(precomposed characters). UCS 里的预作字符是为了同没有预作字符的旧编码, 比如 ISO 8859, 保持向后兼容性而设的. 组合字符机制允许在任何字符后加上重音符或其他指示标记, 这在科学符号中特别有用, 比如数学方程式和国际音标字母, 可能会需要在一个基本字符后组合上一个或多个指示标记.

组合字符跟随着被修饰的字符. 比如, 德语中的元音变音字符 ("拉丁大写字母A 加上分音符"), 既可以表示为 UCS 码 U+00C4 的预作字符, 也可以表示成一个普通 "拉丁大写字母A" 跟着一个"组合分音符":U+0041 U+0308 这样的组合. 当需要堆叠多个重音符, 或在一个基本字符的上面和下面都要加上组合标记时, 可以使用多个组合字符. 比如在泰国文中, 一个基本字符最多可加上两个组合字符.

 

以下文字来自维基百科:

 

组合字符

维基百科,自由的百科全书
字体排印学中, 组合字符 是用来改变其它字符所用的 字符。在拉丁文字中,最常见的组合字符为 附加符号(包含 重音号)。

统一码也包含许多预组字符,即事先将字符组好并赋予码位。所以有可能同时使用组合字符和预组字符。这导致了若要比较两个统一码字串或设计编码转换器时,需要先运行统一码等价性[1]

在统一码中,用于欧洲语言和国际音标的组合用附加符号为 U+0300–U+036F 。组合用附加符号亦存在统一码中的多个区块。在统一码中,附加符号总是加在主要字符之后。因此,有可能加入多个附加符号。直到 2006 ,只有少数软件能正确显示此类组合。

OpenType

OpenType则有ccmp区块,以定义字形是由其它组合字符所组合出来或可分解之。

统一码范围

  • 组合用附加符号(Combining Diacritical Marks) (0300–036F),由版本 1.0 始,陆续修改到 4.1。
  • 组合用附加符号补集(Combining Diacritical Marks Supplement) (1DC0–1DFF),版本 4.1 到 5.2。
  • 符号之组合用附加符号(Combining Diacritical Marks for Symbols) (20D0–20FF),由版本 1.0 开始,陆续修改到 5.1。
  • 组合用半角符号(Combining Half Marks) (FE20–FE2F),由版本 1.0 开始,在 5.2 中修正。

码点U+0346–034A 为国际音标符号

码点 U+034B–034E 为用于disordered speech的国际音标附加符号

  • U+034B  ͋  : nasal escape;
  • U+034C  ͌  : velopharyngeal friction;
  • U+034D  ͍  : labial spreading;
  • U+034E  ͎  : whistled articulation;

注记

  1. ^例如,当在做windows-1258和越南资讯交换标准代码之间的转换时,前者使用组合字符而后者使用大量预组字符。转换器若只是单纯地与统一码码做转换,则会导致混乱。

 

      统一码等价性

      维基百科,自由的百科全书
      为了和许多现存的标准能够相容, 统一码包含了许多特殊 字符。在这些字符中,有些在功能上会和其它字符或字符序列等价。因此,统一码将一些码位序列定义成相等的。统一码提供了两种等价概念:标准等价和相容等价。前者是后者的一个 子集。例如,字符 n 后接着 组合字符 ~ 会(标准和相容)等价于统一码 ñ。而 合字 ff 则只有相容等价于两个 f 字符。

      统一码正规化是文字正规化的一种形式,是指将彼此等价的序列转成同一列序。此序列在统一码标准中称作正规形式。对于每种等价概念,统一码又定义两种形式,一种是完全合成的,一种是完全分解的。因此,最后会有四种形式,其缩写分别为:NFC、NFD、NFKC、NFKD。对于统一码的文字处理程式而言,正规化是很重要的。因为它影响了比较、搜寻和排序的意义。

      等价概念

      标准等价

      统一码中标准等价的基础概念为字符的组成和分解的交互使用。合成指的是将简单的字符合并成较少的预组字符的过程,如字符 n 和组合字符 ~ 可以组成统一码 ñ 。分解则是反向过程,即将预组字符变回部件。

      标准等价是指保持视觉上和功能上的等价。例如,含附加符号字母被视为和分解后的字母及其附加符号是标准等价。换句话说,预组字符‘ü’和由 ‘u’ 及 ‘¨’ 所组成的序列是标准等价。相似地,统一码统合了一些希腊附加符号和外观与附加符号类似的标点符号。

      相容等价

      相容等价的范围较标准等价来得广。如果序列是标准等价的话就会是相容等价,反之则未必对。相容等价更关注在于纯文字的等1价,并把一些语义上的不同形式归结在一起。


      例如,上标数字和其所使用的数字是相容等价,但非标准等价。其理由为下标和上标形式虽然在某些时侯属于不同意义,但若应用程式将他们视为一样也是合理的(虽然视觉上可区分)。如此,在统一码富文件中,上标和下标就可以以比较不累赘地方式出现(见下一节)。

      全角和半角的片假名也是一种相容等价但不是标准等价。如同合字和其部件序列。其只有视觉上但没有语义上的区别。换句话说,作者通常没有特别宣称使用合字是一种意思,而不使用是另一种意思。相对地,这尽限于印刷上的选择。

      正规化

      文书处理软件在实作统一码字串的搜寻和排序时,须考虑到等价性的存在。如果没有此特性的话,使用者在搜寻时将无法找到在视觉上无法区分的字形。

      统一码提供了一个标准的正规化算法,可将所有相同的序列产生一个唯一的序列。 其等价准绳可以为标准的(NF)或相容的(NFK)。 既然可以任意选择等价类中的元素,对每一个等价标准有多个标准形式也是有可能的。 统一码为每一种等价准绳分别提供两种正规形式:合成用的 NFC 和 NFKC 以及分解用的 NFD 和 NFKD。 而不论是组合的或分解的形式,都会使用标准顺序,以此限制正规形式只有唯一形式。

      为了比较或搜寻统一码字串,软件可以使用合成或分解形式其中之一。 只要被比较或搜寻的字串使用的形式是相同的,哪种选择都没关系。 另一方面,等价概念的选择则会影响到搜寻结果。 譬如,有些合字如 ffi(U+FB03)、罗马数字如Ⅸ(U+2168),甚至是上标数字如⁵(U+2075)有其个别统一码码位。 标准正规形式并不会影响这些结果。 但相容正规形式会分解 ffi 成 f、f、i。所以搜寻U+0066(f)时,在 NFKC 中会成功,但在 NFC 则会失败。 同样地有在预组罗马数字 Ⅸ 中搜寻拉丁字母 I(U+0049)。类似地,“⁵”会转成“5” 。

      对于丰富文件格式的浏覧器,将上标转换成到基底线未必是好的,因为上标的资讯会因而消失。为了允许这种不同,统一码字符数据库句含了相容格式标签,其提供了相容转换的细节。[1] 在合字的情况下,这个标签只是 <compat> ,而在上标的情况下则为 <super>。丰富文件格式如超文件标示语言则会使用相容标签。例如,HTML 使用自订标签来将 “5” 放到上标位置。[2]

      正规形式

      统一码定义了四种正规形式。这些形式或其(转换)算法表列如下。所有的形式都会使用到标准顺序,好让结果序列能保证是等价类中的唯一形式。这些算法都是幂等转换,但因为 singletons 和标准顺序的关系,都不是单射。 此外,也没有一个形式在字串串接下会是封闭的,意味着在同一个正规形式下的两个字串串接,并不保证产生的是正规形式。 这会发生在当一个字串并不是以基础字符为开头或以其它中间或结尾字符为开头的字串附加到另一个字串时。

      NFD
      Normalization Form Canonical Decomposition
      以标准等价方式来分解
      NFC
      Normalization Form Canonical Composition
      以标准等价方式来分解,然后以标准等价重组之。若是singleton的话,重组结果有可能和分解前不同。
      NFKD
      Normalization Form Compatibility Decomposition
      以相容等价方式来分解
      NFKC
      Normalization Form Compatibility Composition
      以相容等价方式来分解,然后以标准等价重组之。

      有些码点经过正规转换后,是无法转换成之前的形式。换个方式说则是, singleton 都不会是正规形式。譬如,埃格斯特朗符号 U+212B(Å),在 NFC 中总是被代换成在视觉上相同的 U+00C5 (Å – 在上方带环的 A)。在 NFD 中,则会换成由 U+0041(A)和 U+030A(° – combining ring above)这两个字符所组成的序列。因此,没有一个正规函数是单射的。

      在统一码字符数据库中,singletons是指那些和其它单一字符有相同分解的字符。

      标准顺序

      标准顺序主要关注在结合符序列的顺序。这里将以附加符号做例子。不过,一般而言,附加符号不是结合字符且结合字符不是附加符号。

      统一码假设每个字符是一个结合类别 ,并赋予一个数字。非结合字符的类别值为 0 ,而结合字符则会是一个正值。要得到标准顺序,每个有非零值结合符的子串序要以稳定排序算法排序过。稳定排序是必要的,因为结合字符被假设会影响到排版,所以两个顺序不被视为相等。

      例如,越南语字母中的字符 ế(U+1EBF)同时具有尖音符抑扬符。它的标准分解是序列 U+0065(e)、U+0302(抑扬符)、U+0301(尖音符)。这两个重音的结合类别都是 230 ,所以 U+1EBF 不等同于U+0065 U+0301 U+0302 。

      并非所有结合序列都有预组(在前一例的最后一个可以化简成 U+00E9 U+0302),即使 NFC 会被结合字符所影响。

      因正规化不同而导致的错误

      当两个应用程式分享统一码资料,但却使用不同正规形式时,就有可能导致错误。 例如, Mac OS X 有许多物件是只能使用分解字符(因此,以 UTF-8 为编码又限定分解形式的统一码又被称为 "UTF8-MAC")。 在一特例中, OS X 错误处理用途而产生的组合字符和Samba 档案和打印分享软件(在复制档案时,会将分解过的字母替换成组合过的字母)混合使用时,会导致混淆和损坏资料。[3][4]应用程式若要避免此类问题,可以保留输入码点,然后只在程式内部使用自己的正规化形式。

       

      本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

      【组合字符和预组字符】 的相关文章

      随机推荐