当单个代码点映射到符号就足够时,在 Unicode 中具有符号的组合字符表示的实际应用是什么?
它给我们带来了什么编程/非编程优势?
当存在预先组合的表示时,使用分解的表示(基本字符和组合字符)没有特别的编程优势,例如使用 U+0065 U+0065 LATIN SMALL LETTER E U+0301 COMBINING ACUTE ACCENT 而不是 U+00E9 LATIN SMALL LETTER E 带尖音“é”。这种分解的表示是编程中需要处理的东西,是问题的一部分,而不是优势。所以这类似于询问在字符代码中包含字母 U 的好处。
在实际数据中使用分解表示(或字母 U)并需要处理的原因是编程之外的,因此在 SO 中是题外话。
分解所有可分解的字符可能在处理中具有优势,因为它使数据更加统一、规范。这将与所需处理的某些特定特征有关,并且将通过执行(通常使用库例程)对 NFD 或 NFKD 形式的规范化来实现。但这通常是处理的一部分,而不是强加于输入格式的东西。如果执行了一些字符串匹配,通常希望将字符的分解和预组合表示视为等效,并且规范化使这变得容易。但这是一种处理两种不同表示的方式,而不是它们存在的原因,并且可以通过归一化到 NFC 来同样好地执行(即,预先组合可以预先组合的所有内容)。请参阅 Unicode 常见问题解答部分归一化。
分解后的组件更适合文本编辑,并且“可能但不确定”具有良好的压缩比。
编辑文本时,有时需要修改重音符号,但预组合(预组合不是 Firefox 拼写检查的单词)字符不允许部分修改。有时,用户可能希望在不删除重音的情况下修改基本字符。这些类型的编辑更喜欢使用分解的字符。
关于压缩率,在每种语言单独编码的日子里,它更有意义。在这种情况下,每种语言的 8 位编码允许每种语言拥有自己的字符集。某些语言对分解字符有更好的压缩比。8 位的小空间意味着它们只能容纳这么多独特的代码点,并使用可变宽度和分解的字符。