2. 半角文字と全角文字 

   2−1  同じ文字? 別の文字?
   2−2  日本語入力機能 (IME)
   2−3  半角スペースと全角スペース
   2−4  1バイト文字と2バイト文字


2−1  同じ文字? 別の文字?

パソコンで日本語の文章を文字入力したり文字置換をしたりする際、 英数字とカタカナ、一部の記号に関しては「半角」「全角」を区別することがあります。 仕事等でパソコンを利用していれば、実際何度か耳にしたことがあると思います。
英字における大文字・小文字とは全く別の、コンピュータ上の概念です。
コンピュータ上において、半角文字の 「 A 」 と全角文字の 「 A 」 には、 それぞれ別の文字コードが割り当てられています。シフトJISコードを例に見てみると、
  シフトJISコードの半角'A' ……0x  41
  シフトJISコードの全角'A'……0x8261
ですから、コンピュータ上の"文字"として、厳密に言えば両者は別物として扱われます。
一方で、ソフトウェア上でその差を吸収して同じ文字扱いをする処理も存在するので、最終的には区別なく扱っていたりもします。 このあたりはややこしい所です。

「半角」「全角」の区別は、コンピュータ上の画面表示が極単純な仕組みだった、 ワープロ専用機の時代 〜 極めて初期のパソコンの時代(1990年ぐらいまで)に作られた概念です。
その当時は、ディスプレイの規格表示も「80字×25行」といった言い方でした。 画面全体が(概念上)原稿用紙のように仕切られていて、それぞれの文字は、画面上の決まった桁位置・行位置に、 決まった大きさで表示するしかありませんでしたし、きまった大きさでプリントアウトするしかありませんでした。

その当時、文字の縦横比は、下記のようなきまりが一般的でした。

  半角英数字・半角カタカナ… 高さ:幅=1:0.5
  全角英数字・ひらがな漢字… 高さ:幅=1:1

   teletype
その後、パソコンを制御するのに MacOS、Windowsなどのグラフィカルな画面のOSが登場し、 文字を「一種の図形」として画面上の任意の位置に表示する技術が確立されました。 文字の大きさも自由に変えられるようになりました。
これによって本来は、ディスプレイに対して文字の大きさと表示位置が固定されるという呪縛から解放されたはずなのですが、 一太郎をはじめとする日本語ワープロソフトが、日本語を用いた文書作成上においてはいろいろと都合がよかったことから、 用紙設定に「行・桁」の概念を残しました。 その結果、「半角」「全角」の区別も残り続けました。半角文字2個で全角文字1個と同じ幅、桁が揃って確かにシンプルです。
現在の Winodws でも、等幅フォントを指定すれば、文字幅はおおよそ 全角:半角=1:0.5 となります。 下記は、等幅フォントの「MSゴシック」で表示されています。

 半角英数字 = 112233AABBaabb!!""##$$
 全角英数字 = 123ABab!”#$

 半角英数字 = Zaco's Page!
 全角英数字 = Zaco’s Page!

 半角カタカナ= アアカカガパヒャヒャ、、「「
 全角カタカナ= アカガパヒャ、「

  (↑半角カタカナを使っています。UNIX系では正しく表示できないかも)
現代のパソコンでは、実際には文字表示にプロポーショナルフォントが使われることが多くなっています。 文字ごとに文字幅がばらばらに設定されており、半角と全角の区別もつきづらくなっています。 下記は、プロポーショナルフォントの「MS UI Gothic」で表示されています。

 半角英数字= 112233AABBaabb!!""##$$
 全角英数字= 123ABab!”#$

 半角英数字= Zaco's Page!
 全角英数字= Zaco’s Page!

 半角カタカナ= アアカカガパヒャヒャ、、「「
 全角カタカナ= アカガパヒャ、「

  (↑半角カタカナを使っています。同上)
「Windows登場以降、(プロポーショナルフォントが普及したことによって)半角/全角という区別は無意味となった」 という人もいます。 厳密な話をすれば確かにその通りです。
ですが、本ページではそこは承知の上で、後述する1バイト文字/2バイト文字といった概念との兼ね合いから、 「半角」「全角」という言葉を便利に使ってゆこうと思います。


2−2  日本語入力機能 (IME)

日本語入力( MS-IME、ATOK など)を立ち上げずにキーボードから直接入力すると表示される文字 ( 英字、数字、 ! " # $ % @ + - * / などの記号 )は「半角」文字です。
日本語入力がオンとなっていると「全角」文字の入力が可能となります。

パソコンやネットワークへログオンする時、会員制Webサイトで会員専用ページにアクセスする時などは、 ユーザー名(ID)とパスワードを求められます。 入力すべきユーザー名やパスワードが半角英数字なのに、日本語入力がオンになっていて全角文字を入力してしまい、 アクセス拒否をくらった経験がある方も多いでしょう。

下図は、会員制のサイトへアクセスした際に出るパスワード要求の例と、 Windows10 で利用している ATOK Pro の文字種選択です。
Password IME

文字列やテキスト行を文字コード順に並べ替える時なども注意が必要です。
全角/半角、英字の大文字/小文字、カタカナ/ひらがな(それぞれ前者と後者は 別コードです)の違いを、それぞれのソフトによって同一視したり、別物扱い したりします。


2−3  半角スペースと全角スペース

スペース(空白)文字にも半角/全角の区別があります。文字として存在しているのに見た目には見えない(当然ですね)ので、 文字列検索/置換の時など、気づきにくい間違いを犯す可能性を秘めています。
また、前述のようにユーザー名やパスワードを入力する時に、文字列の先頭や末尾にスペースを入れてしまったため、 コンピュータが「別の文字列である」と解釈してしまってログオンを蹴られる間違いも多いです。 見えない文字だけにやっかいです。

 12月__1日 …… 半角スペース2個 → 計7文字
 12月_1日 …… 全角スペース1個 → 計6文字

 zaco cursor    …… 末尾に半角スペースがある(もちろん見えない)
 zacocursor     …… 空白なし。これは上とは別の文字列です


2−4  1バイト文字と2バイト文字

半角/全角文字の区別と似て非なる概念として、1バイト文字(1バイトコード)と2バイト文字(2バイトコード)の区別がありました。
ユニコード UnicodeUTF)が登場するまでは、 文字コードの値(ビット値)を表現するのに必要なバイト数と、それをメモリ上に置いておいたり(OS内の内部表現)、 ディスク等外部メディアに書きこむ「符号」化されたときのバイト数とは、おおよそ一致していました。
文字コードをメモリ上/ディスク上に置く(記録する)のに1バイト分の容量が必要な文字を「1バイト文字(コード)」といいます。
1バイト(=8ビット)で 0 〜 255 までの数字を表現できるので、256 種類の文字に対してコード番号を割り当てることができます。 全世界で使われているASCIIコード半角の英数字、!?.,;などの記号が割り当てられています。
文字コードをメモリ上/ディスク上に置く(記録する)のに2バイト分の容量が必要な文字を「2バイト文字(コード)」といいます。
2バイト(=16ビット)で、 0 〜 65,535 までの数字を表現できるので、約6万種類の文字に対してコード番号を割り当てることができます。 日本語の場合、JIS第一水準、第二水準までの範囲のかな漢字をこの領域で表現していました。
1バイト文字 ≒ 半角英数字・半角記号類・半角カタカナなど
2バイト文字 ≒ 全角文字(記号罫線類、英数字ギリシャ文字ロシア文字、かな漢字、外字)
下記は、JISコードの亜種であるシフトJISコード体系の例です。 "12月6日" という文字列 ("12"までは半角文字、"月6日"は全角文字) の文字コードを見てみます。
字形
1 2
コード
0x310x320x8C0x8E0x820x550x930xFA
これは、上記の文字列をメモリ/ディスク上に記録するのに、8バイト必要であるということを意味します。

JISコードが第二水準までだった時代は、「かな漢字は2バイト」という感覚で間違いなかったのですが、 第三水準、第四水準まで制定された現在、漢字は2バイト〜3バイトコードになったということができます。 (「面」についての情報が必要なため。)
後ほど詳しく触れますが、第四水準まで含むJISコードを Unicode( UTF )で表現すると、最大4バイトの容量が必要となります。