Unicodeでいくつかの重複文字を見ることができます。たとえば、文字「C」は、コードポイントU+0043およびU+0421で表すことができます。なんでそうなの?
5 に答える
他の人が指摘しているように、ここでのあなたの主な誤謬は、ラテン文字とキリル文字、およびその中のいくつかのグリフ(つまり、C(U + 0043 LATIN CAPITAL LETTER C)とС(U + 0421 CYRILLIC CAPITAL LETTER ES))を混同することです。似ているが異なる文字であるそのような文字のペアはたくさんあります。たとえば、ラテン文字、ギリシャ文字、キリル文字などがたくさんあります。ただし、ほとんどの場合、大文字または小文字でのみ機能します。
ただし、実際には重複があり、意図的に重複している場合もあります。たとえば、(ASCII)ラテンアルファベット全体は、U+FF00とU+FFEFの間の「半値全角形」Unicodeブロックで再び2回表されます。他にもそのような例がありますが、特に平面1の数学アルファベットのセクションには、さらに3つまたは4つのラテンアルファベットがあります。
実際には同じ文字ですが、コードポイントが異なるものが他にもあります。たとえば、µ(U + 00B5 MICRO SIGN)とμ(U + 03BC GREEK SMALL LETTER MU)があります。それらは通常、分解によってリンクされます。
Unicodeは、コードポイントと呼ばれる抽象的な概念を扱います。コードポイントは、文字とそのスクリプトまたはグループを明確に定義します。フォント内の対応するグリフがどのようにレンダリングされるかについては何も述べていません(ラテン語ではすでに大きく異なる可能性があります)。また、このコードポイントがファイルまたはメモリでどのように表されるか(つまり、バイトシーケンスとして)も定義されません。これは、 Unicode変換形式の1つの仕事です。
コードポイントが異なる2つの言語で似たような文字を使用する理由は何ですか?
ここでのUnicodeの主なポイントは次のとおりです。
- 既存のすべての文字エンコーディングとの互換性。これは、Unicodeコードポイントと直接同等のものへのエンコーディングで使用されたすべての文字に対して1対1のマッピングがあることを保証する必要があります。
- 現在使用されているすべてのスクリプトを忠実かつ正確に表現し、後で使用されていてコンピュータシステムに保存する必要のある他のスクリプトに拡張します。
したがって、スクリプトを分離して、外観に応じてキャラクターをマップしようとしないという非常に強いインセンティブがあります。とにかく外観はトリッキーです。たとえば、キリル文字の「т」は、ここでは小さい大文字のラテン語の「T」のように見えます。ただし、イタリック体でレンダリングされる通常の方法:'т'は小文字のラテン語'm'のように見えます。あなたは本当にそのようなキャラクターを外見でマッピングしたくありません。
U+0400からU+04FFのコードチャートを見ると、U+0421がキリル文字の大文字の「es」であることがわかります。ラテン語のCのように見えるかもしれませんが、論理的な特徴は異なります。
文字は同じように見えますが、非常に異なります。U + 0043はラテン文字のCですが、U + 0421はキリル文字のС(ラテンアルファベットのSに対応)です。
それらの無関係な意味のために、大文字と小文字の区別と並べ替えのアルゴリズムがひどく状況依存になるのを防ぐために、別々のコードポイントが必要です-あなたは突然あなたが扱っている言語を推測しなければならないでしょう。
同じ理由で(ほとんどの等幅フォントで) と は同じように見えますが、エンコード方法が異なります。0
つまり、意味が異なります。O
U+0043
はのラテン語表現でありC
、U+0421
はキリル文字です。つまり、同じように見える場合でも、実際には同じ文字ではありません。