我可以在Unicode中看到一些重复的字符。例如,字符“C”可以由代码点U + 0043和U + 0421表示。为什么会这样呢?
最佳答案
正如其他人所指出的,您在这里的主要谬误是混淆了拉丁和西里尔文字以及其中的某些字形(即C(U+0043 LATIN CAPITAL LETTER C)和С(U+0421 CYRILLIC CAPITAL LETTER ES))。有许多这样的字符对,它们看起来很相似,但是是不同的字符。例如,您会在拉丁语,希腊语和西里尔字母中找到很多。不过,大多数情况下,它们只能使用大写或小写字母。
但是,实际上存在重复项,有时是故意重复的。例如,整个(ASCII)拉丁字母在U + FF00和U + FFEF之间的“半角和全角形式” Unicode块中再次表示两次。但是,还有其他此类示例,最值得注意的是,在飞机1的数学字母部分中,存在三个或四个以上的拉丁字母。
实际上,还有其他一些东西是相同的字符,但是在不同的代码点。例如,有µ(U+00B5 MICRO SIGN)和µ(U+03BC GREEK SMALL LETTER MU)。这些通常通过decomposition链接。
Unicode处理称为code point的抽象概念。代码点明确定义了一个字符及其脚本或组。它没有说明字体中对应的字形将如何呈现(对于拉丁语,它可能已经千差万别了)。它还没有定义该代码点在文件或存储器中的表示方式(即字节序列)。这是Unicode Transformation Formats的工作。
What is reason to have a similar looking character in two languages with different code points?
Unicode的要点如下:
因此,有很强的动力将脚本分开,而不要尝试根据字符的外观映射字符。无论如何,外观可能很棘手。例如,西里尔字母'т',在这里看起来像一个较小的大写拉丁字母'T'。但是,斜体呈现时的通常方式是:'т'看起来像是小写的拉丁语'm'。您确实不想按外观映射此类字符。
关于unicode - 为什么在Unicode中有重复的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1741236/