1. ホーム
  2. string

[解決済み】文字、コードポイント、グリフ、書記素はどう違うの?

2022-04-08 04:13:49

質問

現代のユニコードの微妙な部分を理解しようとすると、頭が痛くなります。特に、コードポイント、文字、グリフ、書記素の区別についてです。 最も単純な ASCII文字を使った英語のテキストを扱う場合、すべてが一対一の関係であることが悩みの種です。

Matthias Bynens のような文書でこれらの用語がどのように使用されるかを見てみましょう。 JavaScriptにはUnicodeの問題がある やWikipediaの 漢民族の統一 これらの概念は同じものではなく、混同するのは危険だということは理解できたのですが、それぞれの用語が何を意味しているのかがよくわからないのです。 意味 .

ユニコード・コンソーシアムでは 用語集 というような定義でいっぱいです。

<ブロッククオート

抽象的なキャラクター . テキストデータの構成、制御、または表現に使用される情報の単位。...

...

キャラクター . ... (2)抽象的な文字の同義語。(3) Unicode 文字符号化方式の符号化の基本単位。...

...

グリフ . (1) 1つまたは複数のグリフ画像を表現する抽象的な形式. (2) グリフイメージの同義語。Unicode 文字データを表示する際、特定の文字を描写するために 1 つまたは複数のグリフを選択することができる。

...

書記素 . (1)特定の文字体系の文脈の中で、文字の最小限の特徴的な単位をいう。...

これらの定義のほとんどは、非常にアカデミックでフォーマルな響きを持つが、以下のような品質には欠ける。 意味 そうでなければ、定義の問題を別の用語集や規格のセクションに先送りすることになります。

そこで、私より学識のある方々の難解な知恵を求めます。これらの概念は、それぞれ具体的にどのように異なり、どのような場合に一対一の関係を持たないのでしょうか?

どのように解決するのか?

  • キャラクター は、多くのことを意味するオーバーロードされた用語である。

  • A コードポイント は情報の原子単位である。 テキスト はコードポイントの列である。各コードポイントは、ユニコード規格によって意味を与えられた番号である。

  • A コード単位 の保存単位です。 部分 の符号化されたコードポイント。 UTF-8 の場合は 8 ビット、UTF-16 の場合は 16 ビットを意味します。 1 つの コ ー ド ユニ ッ ト は、 コ ー ド 点全体を表す こ と も で き ます し 、 コ ー ド 点の一部を表す こ と も で き ます。 例えば、雪だるまグリフ( は1つのコードポイントですが、UTF-8のコードユニットが3つ、UTF-16のコードユニットが1つです。

  • A 書記素 は、1つまたは複数のコードポイントのシーケンスで、読者が文字システムの1つの要素として認識する、単一のグラフィックユニットとして表示されます。例えば aä は書記素であるが、複数の符号点から構成されることもある(例. ä は2つのコードポイントであり、1つは基底文字である a しかし、この書記素を表す代替の、旧来の単一の符号点もあります)。一部の符号点は、どの書記素にも属しません (例: ゼロ幅の非ジョイナー、方向性のオーバーライド)。

  • A グリフ は画像であり、通常は フォント (グリフの集合体である)、文字またはその一部を表現するために使用される。フォントは複数のグリフを組み合わせて一つの表現にすることができる。例えば、上記の ä が1つのコードポイントである場合、フォントは、空間的に重なった2つの別々のグリフとしてレンダリングすることを選択することができる。OTF の場合、フォントの GSUB と GPOS テーブルは、これを実現するための置換と位置決めの情報を含んでいます。フォントには、同じ字句に対して複数の代替グリフを含めることもできる。