Unicodeの全角・半角文字
Unicodeの全角・半角文字形式を理解します。存在理由、コードポイント(U+FF00–U+FFEF)、3バイトUTF-8エンコーディング、CJK互換性の用途を解説します。
Encoding Issues
詳細な説明
全角・半角文字
Halfwidth and Fullwidth Formsブロック(U+FF00–U+FFEF)は、他のブロックの文字の代替幅バージョンを含みます。これらは主に、文字が従来等幅レイアウトで「全角」または「半角」のセル幅を占めていた東アジアコンピューティングとの互換性のために存在します。
全角文字
全角形式は標準の対応物の2倍の視覚的幅で、CJK漢字の幅と一致します:
| 全角 | コードポイント | 標準 | コードポイント | UTF-8バイト |
|---|---|---|---|---|
| A (A) | U+FF21 | A | U+0041 | EF BC A1 vs. 41 |
| 0 (0) | U+FF10 | 0 | U+0030 | EF BC 90 vs. 30 |
なぜ存在するのか
コンピューティング初期の日本語テキストシステムでは、各セルが1つのCJK文字(全角)または1つのASCII文字(半角)を保持できる固定幅ディスプレイを使用していました。配列を維持するために、ASCII文字には全角バリアントが、カタカナには半角バリアントが必要でした。
エンコーディングの影響
すべての全角文字はUTF-8で3バイトを使用し、ASCIIオリジナルの1バイトと比較されます。全角ラテン文字の文字列は標準の等価物の3倍のストレージを使用します。
正規化と変換
UnicodeのNFKCおよびNFKD正規化形式は全角文字を標準の等価物に変換します:
"\uFF21".normalize("NFKC") === "A" // true
これは多言語システムでの検索インデックス作成とデータ重複排除に不可欠です。
ユースケース
全角ラテン文字を含む日本語ユーザー入力の正規化、レガシーCJKシステムからのデータインポートのデバッグ、全角文字と標準文字を同等に扱う検索の実装、混合幅テキストの正確なストレージ要件の計算に使用します。