【ぜんかくもじ】

全角文字 とは?

最終更新:
💡 見た目の幅と、データの大きさは別もの

日本語の組版などで、全幅の文字枠を使う文字の呼び方。全角のAと半角のAは別の文字だが、表示幅・保存時のバイト数・プログラムの文字数は同じものではない。

📌 このページのポイント
全角・半角:見た目とバイト数半角AアUTF-8の例A:1 ア:3バイト全角AアUTF-8の例A:3 ア:3バイトNFKC正規化の例A → A  ① → 1幅・バイト数・文字数を、分けて考えよう正規化は、入力の用途に合わせて使う
表示幅のイメージ。実際の幅はフォントにも依存します。NFKCは全角・半角以外の違いも変えるので用途を確認します。
ひよこ ひよこ
全角と半角は、文字の大きさが違うだけ?
ペンギン先生 ペンギン先生
全角のAと半角のA、全角のカと半角のカは、異なる文字として登録されているよ。固定幅の日本語表示では、全角は全幅、半角はその半分の枠を使うというイメージ。ただし実際の見た目は、フォントや表示環境によって変わるんだ。
ひよこ ひよこ
全角は2バイトと覚えてよい?
ペンギン先生 ペンギン先生
保存する符号化方式によるから、一律には言えないよ。UTF-8ではAは1バイトだけれど、全角のAも半角カナのアも3バイト。見た目が半角でも1バイトとは限らないんだ。表示の幅と、保存時のバイト数は分けて考えよう。
ひよこ ひよこ
プログラムでの文字数も、同じではないの?
ペンギン先生 ペンギン先生
数える単位によるよ。JavaScriptの文字列のlengthはUTF-16のコード単位を数える。たとえば「あ」は1だけれど、「𠮷」は2になるんだ。見た目の文字数や表示幅、UTF-8のバイト数を、そのままlengthで測れるわけではないよ。
ひよこ ひよこ
日本語のURLは、使えないの?
ペンギン先生 ペンギン先生
使えるよ。URLの規則に沿って、ブラウザーなどがドメイン名やパスを扱う。たとえば日本語のドメイン名は、通信に使う表現ではASCII形式に変換される。全角だからどの入力でもエラー、とは考えず、コード・識別子・入力項目など、その場所の規則を確かめよう。
ひよこ ひよこ
全角と半角は、自動でそろえてしまえばいい?
ペンギン先生 ペンギン先生
用途に合わせよう。NFKCという正規化では、全角英数字をASCIIにそろえられるけれど、丸数字など別の違いもなくなる。検索の照合に使う場合と、利用者が入力した文字をそのまま保存する場合は分けて設計する。パスワードや識別子も、決めた仕様を確認せず一律に変換しないことが大切だよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「全角文字」って出てきたら「日本語などで全幅の文字枠を使う文字。保存するバイト数とは別の話」と思えばだいたいOK!
📖 おまけ:英語の意味
「Fullwidth Character」 = 全幅の文字
💬 東アジアの固定幅の組版では、全幅の文字枠と、その半分の枠を区別するよ。従来の符号化では幅とバイト数が対応することが多かったけれど、現在も全角を一律に2バイトと呼ぶのは正確ではないんだ。

参考資料

← 用語集にもどる