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システムからのデータインポートのデバッグ、全角文字と標準文字を同等に扱う検索の実装、混合幅テキストの正確なストレージ要件の計算に使用します。

試してみる — Unicode Inspector

フルツールを開く