Unicodeの互換
文字とは、
Unicodeコンソーシアムが利用を推奨していない
図形文字群のことです。これらの
文字は、主に既存の
文字コードとの互換性や往復変換のために収録されました。しかし、その定義は単純ではなく、
Unicodeの
文字特性である「分解」という概念が深く関わっています。
互換
文字は、他の
文字への分解特性を持っており、これは単に等価な
文字への置き換えだけでなく、様々な理由による互換性を示すものです。分解には正準分解と互換分解があり、これによって
文字間の関係性が定義されます。互換
文字は、複数の代替字形や合成済み
ダイアクリティカルマーク、他の
文字コードからの収録
文字、視覚的に似た異なる意味の
文字など、多岐にわたります。
互換文字の種類
互換
文字は、大きく分けて以下の3つのカテゴリに分類できます。
1.
代替字形や合成済みダイアクリティカルマーク:
- これらは、
ソフトウェアやフォントの実装が完全な
Unicodeテキスト描画処理に対応していない場合に、旧来の
文字コードとの互換性を保つために使われます。
- 例えば、合成済み
ダイアクリティカルマーク(例:Å)や
合字(例:ffi)、合成済み
ローマ数字(例:Ⅻ)などが該当します。
- これらは、
Unicodeの正規化プロセスによって、より基本的な
文字の組み合わせに分解されることが推奨されています。
2.
他の文字コードからの収録文字:
- これらは、
Unicodeの原則である
プレーンテキストよりもリッチテキストの要素として追加された
文字です。
- 例えば、
アラビア文字の文脈依存のグリフや、全角・半角などの字形が該当します。
-
Unicodeでは、これらのグリフはフォントの機能で代替表示することが推奨されています。
3.
視覚的に似た異なる意味の文字:
- これらは、グリフは似ていても意味が異なる
文字です。
- 例えば、数学記号のギリシャ
文字や
ヘブライ文字、
ローマ数字などが該当します。
- これらの
文字は、テキスト処理
ソフトウェアが混乱を避けるために特別な処理をする必要がある場合があります。
リッチテキスト互換文字
特に、リッチテキスト互換
文字は、
Unicodeの
プレーンテキストの理念から外れるため、使用が推奨されていません。これらの
文字は、書体やスタイルを
文字コードに含めてしまうことで、テキストの検索や比較を複雑にする原因となります。例えば、数学用英数記号、括弧付き
文字、丸付き英数字、上付き・下付き
文字などが該当します。
これらの
文字は、リッチテキストの書式設定で代替可能であり、
プレーンテキストの比較、照合、処理、格納の目的では意味的に冗長です。
Unicodeの理念では、リッチテキストの表現はHTMLやCSSなどの別の
マークアップ言語で処理されるべきです。
意味的に違いのある文字
互換
文字の中には、視覚的には似ていても意味的に異なる
文字があります。これらは、特定の用字系や表記体系に特化した
文字コードに由来する場合があります。例えば、数学記号に使われるギリシャ
文字や
ヘブライ文字、
ローマ数字などが該当します。これらの
文字は、意味的な区別が重要であるため、単純に互換
文字として一括りにすることはできません。
互換ブロック
いくつかの
Unicodeのブロックは、ほとんどが互換
文字で構成されています。これらの互換ブロックは、互換
文字の代替として
Unicodeの分解を利用することが推奨されています。ただし、一部には互換
文字ではないものの、互換ブロックに分類されてしまっている
文字も存在します。
正規化
Unicodeの正規化は、テキスト
文字列の比較や照合を行う際に、互換分解の手続きを経ることを指します。これは、大
文字・小
文字や
ダイアクリティカルマークを区別しない検索など、テキスト処理の基本的な操作を正確に行うために不可欠です。正規化は通常、格納されたテキストデータを変更することなく行われますが、場合によっては互換
文字を永久的に削除するような操作も行われることがあります。
まとめ
Unicodeの互換
文字は、
文字コードの歴史的な経緯や互換性の維持のために必要な存在ですが、同時にテキスト処理を複雑にする要因でもあります。
Unicodeの理念では、
プレーンテキストは単純な
文字のシーケンスであるべきであり、リッチテキスト表現は別の
マークアップ言語で処理されるべきです。互換
文字を避けることは、テキストデータの正確性、柔軟性、そして効率性を高める上で重要です。
Unicodeを利用する際は、互換
文字の存在を理解し、可能な限り正規化された形式でテキストを処理することが推奨されます。これにより、異なるシステム間でのデータの相互運用性を高め、テキスト処理に関するエラーを減らすことができるでしょう。