Unicode相容字符

当讲解和谈论统一码和UCS时，经常提到「相容字符」这个字眼。相容字符是指统一码联盟主张不要使用的图像式字元，正如统一码联盟 所说：
若不是为了与其他标准间相容和能够双向对应转换，就不会在统一码中编码的字符。
然而，其定义实在远比这话语有更深层和复杂的意味。每个字符都有一个标准分解（canonical decomposition）的属性，可是大部分字符这个属性的值是这个字符自身，但超过五千个字符的"标准分解"属性的值不是该字符自身。这个"标准分解"属性值能将相容字符对映到一个或多个的其他的非相容字符，并借此定义这五千多个字符为统一码中的相容字符。指定某字符为相容字符的理由各异，下面有更详细的说明。「分解」这个用语有时会令人感到困惑，因为有些字符「分解」后还是单个字符的形态，这时该字符的分解值就是另一个相等或近似相等的字符。相容字符与其非空值的标准分解（语义上）是确切等价的。
如果一个相容字符可以用多个分解序列表示，那么采用了"标准顺序"（canonical order）的序列是该字符的"标准分解"。例如，ộ，有两种分解序列：（U+006F LATIN SMALL LETTER O） （U+0302 COMBINING CIRCUMFLEX ACCENT） （U+0323 COMBINING DOT BELOW）或者 （U+006F LATIN SMALL LETTER O） （U+0323 COMBINING DOT BELOW）（U+0302 COMBINING CIRCUMFLEX ACCENT），两个附加符号出现在分解序列中的位置是可交换的。
Unicode的另一个概念相容性分解（compatibility decomposition），是把一个相容字符映射为一个或多个的其他的非相容字符。但相容字符与相容性分解可能会有语义（如排版格式上）的损失。例如上角标数字字符⁴与普通的数字字符4。
Unicode的所有"预组合字符"（precomposed character）都是相容字符。即所有预组合字符都能够用其他字符或字符序列来表示。因此"预组合字符"的"标准分解"总是存在。具有不同于自身且不为空值的"标准分解"属性值的字符，称为"标准组合字符"（canonical composite）。
相容字符种类和关键字.
根据相容分解属性的值，可将统一码的 5,402 个字符分成 17 逻辑分类，并赋予其关键字。具有相容分解但没有关键字的字符被称作"标准可分解字符"，这些字符并不是相容字符。相容可分解字符的关键字包括：
&lt;initial&gt;、&lt;medial&gt;、&lt;final&gt;、&lt;isolated&gt;、&lt;wide&gt;, &lt;narrow&gt;、&lt;small&gt;、&lt;square&gt;、&lt;vertical&gt;、&lt;circle&gt;、&lt;noBreak&gt;、&lt;fraction&gt;、&lt;sub&gt;、&lt;super&gt;和 &lt;compat&gt;。
这些关键字提供了一些讯息：包含相容字符和它的相容分解字符序列。
相容字符可分为以下三类：
因为这些语意上不同的字符有可能会使用相似的字形，文书处理软体应该向使用者指示出其可能的混淆。当比较和排序文本字符串时，同一字符的不同字形或格式化文本的不同版本不应该改变文本处理结果。例如，软体使用者可能会困惑，在寻找一页中的大写字母“I”时，软体无法找到在视觉上相似的罗马数字“Ⅰ”（二者是"相容等价"，但不是"标准等价"）。
相容对应的种类.
字形代换和组合.
对于遵循统一码标准的文字处理和显示软体来说，有些相容字符是不必要的。这些包含：
譬如，罗马数十二（“Ⅻ”：U+216B）可以分解成一个罗马数十（“Ⅹ”：U+2169）和两个罗马数一 (‘Ⅰ’: U+2160)。Unicode认为字符序列'U+2169 U+2160 U+2160'是否被组合为单个字符'Ⅻ'，这是文本绘制软件要处理的问题。
如 Å（U+00C5），统一码倾向视为两个分开的字符，一个拉丁字母 A （“Latin letter A”）结合一个“Combining Ring Above”（U+030A）。
总结而言，上述的预组合的字符的使用是不必要的，应该用普通字符的序列来表示这些预组合的字符；由遵从Unicode规范的字体或者文本绘制软件来决定选用哪个字形。
Unicode字符集（即UCS）, Unicode字符的属性、Unicode算法为文本处理软件实现提供了所需的一切来适当地绘制处于"分解等价"状态的字符。因此那些"分解相容字符"变成了冗余与不必要。字符集中"分解相容字符"的存在导致了文本处理时额外的代价用于正确地比较、排序（参见"统一码等价性"）。此外，"分解相容字符"并没有提供补充的或不同的语义。"分解相容字符"也没有提供绘制时视觉上的不同，如果文本布局与字体遵循Unicode规范。"分解相容字符"也不是与其他字符集往返转换所需要的，因为可以把一个字符集的分解字符序的列来映射到另一字符集的预组合的字符。 上下文中字形选择，如阿拉伯字母可以根据它在单词内的位置而映射到传统字符集的具有特定字形的某个字符上。 
为了处理相容字符，文本软件必须遵从几个Unicode协议。软件必须能够：
Unicode的5,402个相容字符中，上述这些不应该使用在文本中的字符共计3,779个。这包括所有具有关键字 &lt;initial&gt;、&lt;medial&gt;、&lt;final&gt;、&lt;isolated&gt;、&lt;wide&gt;, &lt;narrow&gt;、&lt;small&gt;、&lt;square&gt;、&lt;vertical&gt;、&lt;fraction&gt;的相容字符。还包括大多数具有&lt;compat&gt;关键字的相容字符（例外情况是有&lt;compat&gt;关键字的被封闭的字母数字、被封闭的象形文字、以及下文所提及)
格式化文本所用的相容字符.
用于格式化文本的相容字符，不是Unicode与UCS所考虑的目标。格式化文本所用的相容字符，可能与普通字符在语义上有出入。例如，作为上角标的数字4，与普通字符数字4，可能语义上不完全等价。 
格式化文本相容字符包括：
格式化文本相容字符共有1,451个，包括所有具有关键字&lt;circle&gt;与&lt;font&gt;（除了下文列出3个语义不同的例外），11个空格符的变种具有关键字&lt;compat&gt;，具有关键字&lt;superscript&gt;或&lt;subscript&gt;的定义在基本多语言平面的“上标及下标”块中的字符。 定义在U+2100至U+214F定义的Letterlike Symbols块中的字符，都是具有字体格式的相容字符。
语意上相异字符.
Unicode对于用于科学或数学的希伯来字母、希腊字母符号，作为相容字符定义。如：
6个作为度量单位的相容字符，Unicode建议使用其等价分解的字符序列：
Unicode规定了22个类似字母的相容字符。
一些语言中，语义与字形的位置有关的字符，共计130个。
罗马数字：
 
相容块.
Unicode编码空间的几个字符块，都是或大部分是相容字符。
但是在“CJK Compatibility Ideographs”块中，包含一些不是相容字符的字符： 
还有一个字符U+FA23「﨣」与U+27EAF「𧺯」重复定义。
类似情况在希伯来语、阿拉伯语也有。
规范化.
统一码要求软体在进行比较或校正文句时，需要先经过相容分解，这个过程称作规范化。这是做一些相似运算时所必须的动作，如当一个使用者进行“不区分大小写”或“不区分附加符号的字母”的搜寻时。典型的规范化是指不会改变底层储存的资讯（无失真）。然后，有些软体可能会造成永久的改变，如在文件内容中删除标准的或非标准的相容字符（失真）。