合成済み 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正規化されたファイル名を返すため、この問題に頻繁に遭遇します。クロスプラットフォームアプリケーションは両方の形式を処理する必要があります。