世の中には半角、全角文字というものがある。
実はそんなものないんだ、と言ってはみても、どうしようもなく、存在するものは存在する。
これについて理解しているところを書く。

Hiragana basic

ASCII

昔のコンピューターは、文字コードとして英数字を使っていた。
ASCIIという7ビットコードを使っていた。
aは0x61。
Aは0x41だった。
パソコン通信も英数字しかなかった。
日本人同士が「Hello!」とか「Kyou wa ii tenki desu ne! (^_^)」とか言っていた。

JIS X 0201

そのうち日本ではJIS X 0201という文字コードができて、8ビットでカタカナを出せるようになった。
(JIS X 0201には7ビットコード+面切り替えという方式もあるが、ここでは略す)
パソコン通信も英数字+カタカナでやっていた。
「キョウハ イイ テンキ デスネ!」とか「JIS X 0201ノ オカゲデ カタカナ ツカエテ Happi---!!! (^_^)」
とか言っていた。

このとき、JIS X 0201では、英数字もカタカナも1バイトだった。
昔のコンピューターはキャラクターディスプレイと言って、1行が80文字というふうに表示される文字数と位置が固定されていた。
印刷はラインプリンタと言って、やはり130文字とか、調整はできたが固定されていた。

78JIS

そのうち日本でJIS X 0208と言って、8ビット符号2文字でひらがなや漢字を出せるようになった。
JIS X 0208にはいくつかバージョンがある。
1978年に出た最初のJIS X 0208を78JISとも言う。
(当時の名前はJIS C 6226-1978)

78JISはJIS X 0201と共通する、各種記号、英数字、カタカナを、JIS X 0201とは別のコードポイントに符号化していた。
そして、JIS X 0201のAと78JISのAが、同じ字か、違う字か、明らかにしなかった。

EUC-JP、Shift_JIS

EUC-JP、Shift_JISという文字コード系をいろんな会社が制定し、JIS X 0201およびJIS X 0208を取り込んだ。
このとき、EUC-JPおよびShift_JISでは、JIS X 0201とJIS X 0208に両方入っている同じ字のように見える各種記号、英数字、カタカナを、違う字とした。
JIS X 0201由来のAは1バイトの半角文字、JIS X 0208由来のAは2バイトの全角文字としたのである。

なぜ字の横幅を2倍にしたかというと、これはぼくの推測だが、1バイトの文字80文字でディスプレイ1行埋まるのなら、2バイトの文字40文字でディスプレイが埋まるのが自然だから、2バイト文字は1バイト文字の2倍の横幅ってことにしたんじゃないだろうか。

従来作られたASCIIおよびJIS X 0201ベースの大量のデータがあるので、これらのコードは変えるわけにいかない。
海外からASCIIのデータはガンガン入ってきて、英数字は互換性があるという前提にもたれよりかかってできているシステムを書き換えるのも大変だ。
(正確にはASCIIとJIS X 0201のローマ字は違う。0x5Cが前者はバックスラッシュで後者は円記号、0x7Eが前者はチルダで後者は上線である。)
だから、JIS X 0201を廃止して全部JIS X 0208に移行するという選択肢はない。

一方、ひらがな、漢字はJIS X 0208にしかないのでそっちを否応なく使う。

カタカナは全角を使いたい。
「カタカナは全角を使いたい」などと、カタカナとひらがなの字が違うのは不便である。
また、ガギグゲゴのようにJIS X 0208の濁音、半濁音は完成形だが、JIS X 0201の濁音、半濁音はガギグゲゴのように濁点が独立形であって、1音に2文字食うのも不自然である。
ただ過去の資産で半角カナが消せない。
新生銀行はいまだにパソコンユーザーに半角カナを使わせる。

全角の英数字は使わないようにしてもいい。
でも、£、\、÷のようなJIS X 0208で増えた記号は使いたい。
なお、新聞は絶対に英数字を全角で書く。
「APECに参加した各国首脳」のようになる。
もともと縦書だし、システム上全角文字しか受け付けないものもあるようである。

ということで、記号、英数字、カタカナについては、半角と全角を別の字として混合して使うことになった。

Unicode

さて、国際的な文字コードであるUnicodeが開発された。
1992年のUnicode 1.0.1にはすでに、JIS X 0201とJIS X 0208が取り込まれている。

Unicode - Wikipedia

このUnicodeでは、

 ・JIS X 0201の英数字、記号のうち、円記号(0x5C)と0x7E以外のものはC0 Controls and Basic Latinブロックの字に対応する。
  JIS X 0201コードが0x??のものは、U+00??というUnicodeになる。
  AはJIS X 0201で0x41だが、UnicodeはU+0041で、文字名はLATIN CAPITAL LETTER A。

 ・円記号(0x5C)はC1 Controls and Latin-1 SupplementブロックのU+00A5に対応する。文字名はYEN SIGN。
  これはISO 8859-1の0xA5である。

 ・オーバーライン(0x7E)はGeneral PunctuattionブロックのU+207Eに対応する。文字名はOVERLINE。

 ・JIS X 0201のカタカナはHalfwidth and Fullwidth Formsブロックの字に対応する。カはU+FF76で文字名はHALFWIDTH KATAKANA LETTER KA。

 ・JIS X 0208の英数字、記号のうち、オーバーライン以外はHalfwidth and Fullwidth Formsブロックの字に対応する。
  AはU+FF21で文字名はFULLWIDTH KATAKANA LETTER A。
  このように、ある半角英数字、半角記号のUnicode名が????であるとき、全角形の名称はFULLWIDTH ????となる。

 ・例外がオーバーラインで、FULLWIDTH OVERLINEというUnicodeはない
  OVERLINEの全角形はFULLWIDTH MACRON(U+FFE3)であるとUnicode code chartsには書かれているが、マクロンはオーバーラインとは別の字である。
  ちなみに半角形のマクロンはC1 Controls and Latin-1 SupplementブロックのU+00AFで名前はMACRON。
  ISO 8859-1の0xAFに対応する字である。

 ・JIS X 0208のカタカナはKatakanaブロックの字に対応する。カはU+304Bで文字名はKATAKANA LETTER KA。

他に注意すべき字としてはこういうのがある。

 ・JIS X 0208のバックスラッシュ(\)はFULLWIDTH REVERSE SOLIDASという名前だが、この字の半角形はJIS X 0201にない
  REVERSE SOLIDASという字はC0 Controls and Basic LatinブロックのU+005C。
  これはASCIIの0x5Cに相当する。

 ・UnicodeのU+FF5EはFULLWIDTH TILDEという名前だが、この字に相当するJIS X 0208全角記号(全角のチルダ)はない
  JIS X 0208の波ダッシュ(〜)はWAVE DASHという記号でCJK Symbols and PunctuationブロックのU+301Cにある別の字。

 ・JIS X 0208の空白( )はJIS X 0201の空白( )の全角形ではない
  JIS X 0201の空白( )は文字とも制御文字とも取れる特殊文字。
  JIS X 0208の空白( )は段落を1段下げたり、俳句や和歌の区切れに使うれっきとした文字。
  JIS X 0201の空白はUnicodeではC0 Controls and Basic Latinブロックの文字U+0020で文字名はSPACE。
  JIS X 0208の空白はUnicodeではCJK Symbols and Punctuationブロックの文字U+3000で文字名はIDEOGRAPHIC SPACE。
  名前がFULLWIDTH SPACEではない。
  JIS X 0201の空白と、JIS X 0208の空白は別の字。

 ・JIS X 0208の読点(、)はCJK Symbols and Punctuationブロックの文字U+3002で文字名はIDEOGRAPHIC COMMA。
  JIS X 0201の読点(、)はHalfwidth and Fullwidth Formsブロックの文字U+FF61で文字名はHALFWIDTH IDEOGRAPHIC COMMA。
  句点(、および、)に関しても似たような関係である。
  句読点は日本のものなので全角が本来。

 ・JIS X 0201のカンマ(,)はC0 Controls and Basic Latinブロックの文字U+002Cで文字名はCOMMA。
  JIS X 0208のカンマ(,)はHalfwidth and Fullwidth Formsブロックの文字U+FF0Cで文字名はFULLWIDTH COMMA。
  ピリオド(.および.)に関しても似たような関係である。
  カンマ、ピリオドは西洋のものなので半角が本来。

 ・JIS X 0208の独立形濁点(゛)はHiraganaブロックの文字U+309Bで文字名はKATAKANA-HIRAGANA VOICED SOUND MARK。
  JIS X 0201の濁点(゙)(独立形しかない)はHalfwidth and Fullwidth Formsブロックの文字U+FF9Eで文字名はHALFWIDTH KATAKANA VOICED SOUND MARK。
  半濁点(゜および゚)に関しても似たような関係である。
  濁点、半濁点は日本のものなので全角が本来。
  ただし、単純に全角形の文字名にHALFWIDTHをつけないことに注意。
  半角系にひらがなは存在しないのでHALFWIDTH KATAKANA-HIRAGANA VOICED SOUND MARKとは言わない。

 ・JIS X 0208の長音記号(ー)はKatakanaブロックの文字U+30FCで文字名はKATAKANA-HIRAGANA PROLONGED SOUND MARK。
  JIS X 0201の長音記号(ー)はHalfwidth and Fullwidth Formsブロックの文字U+FF70で文字名はHALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK。
  あんまり長音記号でひらがなって使わない気がするけど、どーなんだろ。(<=早速使ってるし

 ・JIS X 0208の中黒点(・)はKatakanaブロックの文字U+30FCで文字名はKATAKANA MIDDLE DOT。
  JIS X 0201の中黒点(・)はHalfwidth and Fullwidth Formsブロックの文字U+FF70で文字名はHALFWIDTH KATAKANA MIDDLE DOT。
  中黒はカタカナって決めつけられている。
  「お・も・て・な・し」とかそういうのもあるけど。

なお、Unicodeの各文字にはEast Asian Widthという文字属性があり、日本を含む東アジアでは半角文字なのか全角文字なのか情報として持っている。

東アジアの文字幅 - Wikipedia

UAX #11: East Asian Width

97JIS

さて、1997年に、JIS X 0208が全面的に改定され、これまで不明確だった点がいろいろ明確化された。
97JISと呼ぶ。
(JIS X 0208:1997)
ここで、以下のように定められた。

 ・JIS X 0201とJIS X 0208を同時に使う場合、JIS X 0201のカナは使わない

 ・同じく、JIS X 0208の英数字、記号は使わない

 ・二重符号化はしない

 ・ただし一時的な互換性のための用途として、JIS X 0201カナの代替名称を附属書に定める(カはHALFWIDTH KATAKANA LETTER KAなど)

 ・同じく、JIS X 0208の代替名称も定める(AはFULLWIDTH LETTER Aなど)

規格書本体には半角、全角という言葉は出てこない。
そもそも文字コード規格は字の大きさを定めるものではないからである。
(ただし解説に「いわゆる全角・半角」とか「“全角”文字」とか、「世間の人はこう思ってますけど…」という文脈では出てくる)
(でも「代替名称」に「HALFWIDTH」とか「FULLWIDTH」と出てくる以上、二重符号化するときは字の大きさを半分にしたり倍にしたりするんですよね、という意味はあるはず)

文字の対応はだいたいUnicodeと同じである(合わせてある)。

1字だけ例外があって、オーバーラインの全角形の名前がFULLWIDTH OVERLINEと書いている。
こういう字はUnicodeにない

なお、この「一時的に互換のために二重符号化を許容する」状態は1997年から17年後の2014年も続いている。
JIS X 0213でも継承された。

ちょっと今日、ブログを書き始めたのが遅かったので今日はこのへんで。
(なんだこの終わり方)