合成済み vs 分解済みUnicode文字

合成済み(単一コードポイント)と分解済み(基底+結合マーク)のUnicode文字の違いを理解し、正規化がそれらをどのように変換するかを学びます。

Character Types

詳細な説明

合成済み vs 分解済み文字

Unicodeは多くのアクセント付き文字を2つの方法で表現できます:単一の合成済みコードポイント、または基底文字と結合マークの分解済みシーケンスです。

両方の表現の例

文字 合成済み 分解済み
é U+00E9 (1コードポイント) U+0065 + U+0301 (2コードポイント)
ö U+00F6 (1コードポイント) U+006F + U+0308 (2コードポイント)
ç U+00E7 (1コードポイント) U+0063 + U+0327 (2コードポイント)

文字列長の問題

"é".length           // 1 (合成済み)
"é".length          // 2 (分解済み)
"é" === "é"    // false!
"é".normalize("NFC") === "é".normalize("NFC")  // true

どちらを選ぶか

NFC(合成済み)が一般的に推奨されます:より短いバイト表現、レガシーシステムとの互換性、W3C推奨です。

ユースケース

テキスト処理、検索、ファイル処理システムを構築する開発者に直接関係します。macOS開発者はファイルシステムがNFD正規化されたファイル名を返すため、この問題に頻繁に遭遇します。クロスプラットフォームアプリケーションは両方の形式を処理する必要があります。

試してみる — Unicode Normalizer

フルツールを開く