ラテンアクセント文字 — Unicodeのダイアクリティカルマーク
Unicodeのラテンアクセント文字について学びます。合成済みvs.結合形式、2バイトUTF-8エンコーディング、正規化(NFC/NFD)、一般的なエンコーディングの落とし穴を解説します。
詳細な説明
Unicodeのラテンアクセント文字
アクセント付きラテン文字(例:é、à、ü、ñ、ç)は、西洋言語で最も一般的な非ASCII文字です。Unicodeは同じ文字を2つの方法で表現でき、柔軟性と複雑さの両方を生み出しています。
合成済みvs.結合形式
Unicodeは同じ視覚的な文字に2つの表現を提供します:
合成済み(NFC):
- é = U+00E9(LATIN SMALL LETTER E WITH ACUTE)— 単一コードポイント、2 UTF-8バイト
結合(NFD):
- é = U+0065 + U+0301(LATIN SMALL LETTER E + COMBINING ACUTE ACCENT)— 2コードポイント、3 UTF-8バイト
両方とも同じように表示されますが、バイト表現、文字列長、比較動作が異なります。
Latin-1 Supplementブロック
西ヨーロッパ言語の合成済みアクセント文字はLatin-1 Supplementブロック(U+0080–U+00FF)を占めます。これらはすべてUTF-8で正確に2バイトを使用し、分解された等価物よりもコンパクトです。
正規化が重要
文字列比較と検索は正規化を考慮する必要があります:
"caf\u00E9" !== "cafe\u0301" // 異なるバイトシーケンス!
"caf\u00E9".normalize("NFC") === "cafe\u0301".normalize("NFC") // true
Unicode Inspectorはテキストが合成済み形式と結合形式のどちらを使用しているかを表示し、比較と検索の失敗を診断するのに役立ちます。
文字化け
UTF-8エンコードされたアクセントテキストがLatin-1/ISO-8859-1として読み込まれると文字化けが発生します:é(2バイト:C3 A9)がé(2つのLatin-1文字)として誤解釈されます。Unicode Inspectorはこのような壊れたテキストの実際のコードポイントを明らかにし、エンコーディングの不一致を特定しやすくします。
ユースケース
多言語アプリケーションでのアクセントテキストのエンコーディング問題のデバッグ、ダイアクリティカルマーク付きテキストで文字列比較が失敗する理由の理解、異なる文字エンコーディングを持つシステムからインポートされたデータの文字化け診断、データベースのNFCとNFD正規化の選択に使用します。