【ぜんかくもじ】

全角文字 とは?

💡 半角の2倍の幅を占める文字、日本語の漢字・かながその代表
📌 このページのポイント
半角文字と全角文字の比較 半角(1バイト文字) A B C ← 英字 1 2 3 ← 数字 ア イ ウ ← 半角カナ @ # $ ← 記号 全角(2バイト文字) A B C ← 全角英字 1 2 3 ← 全角数字 ア イ ウ ← 全角カナ @ # $ ← 全角記号 半角幅 全角幅(2倍) 全角は半角の2倍の表示幅を使う
半角文字と全角文字の比較イメージ
ひよこ ひよこ

全角と半角って何が違うの?

ペンギン先生 ペンギン先生

表示幅と文字コードが違う。半角文字(英数字・記号)は1文字が1カラム分の幅、全角文字(漢字・ひらがな・カタカナ)は2カラム分の幅。もともとは固定幅フォントターミナル表示で幅を合わせるために区別された。

ひよこ ひよこ

プログラムで問題になるの?

ペンギン先生 ペンギン先生

よくある。全角スペースをコードに混入させてエラー(見た目では分からない)、全角英数字をDBに登録してバリデーション失敗、URLに全角文字を入れてリンク切れ、などのトラブルが多い。ログや設定ファイルには半角のみを使うのが基本。

ひよこ ひよこ

文字数のカウントはどうなるの?

ペンギン先生 ペンギン先生

言語・ライブラリによって異なる。JavaScriptの`"あ".length`は1(Unicodeコードポイント1個)だけど、表示幅は2。文字列の折り返しや文字数制限で「見た目の幅」が問題になるときはwcswidthなどで「表示幅」を計算する必要がある。

ひよこ ひよこ

プログラムで全角半角を変換する方法ってあるの?

ペンギン先生 ペンギン先生

Pythonならunicodedata.normalize('NFKC', text)で全角英数字を半角に変換できる。JavaScriptでも正規表現ライブラリで対応できるよ。入力フォームでは受け取り時に自動変換する設計がよく使われるんだ。

ひよこ ひよこ

海外の人は全角半角で困ることってないの?

ペンギン先生 ペンギン先生

実は全角半角という概念は日本語・中国語・韓語など東アジアの文字を使う環境特有の問題なんだ。英語圏では存在しない概念だから、海外製のソフトウェアライブラリが全角文字を想定していなくてバグになることがある。国際化対応では「表示幅」と「バイト数」と「文字数」がすべて違うことを意識するのが大事だよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
全角文字って出てきたら「半角の2倍の幅の文字、漢字・ひらがな・カタカナが代表例でシステム入力では半角を使うことが多い」と思えばOK!
📖 おまけ:英語の意味
「Double-byte Character / Full-width Character」 = 全幅文字・2バイト文字
💬 日本語などのCJK(中国語・日本語・韓国語)文字処理のために1バイト文字(半角)の2倍の表示幅が必要だったことに由来。端末の桁数管理のために「全角=2カラム」という概念が生まれた
← 用語集にもどる