さて、今日はJIS X 0208について述べます。

Tomare footprints
 ASCIIが7ビットでいわゆる半角英数字、JIS X 0201が8ビット(または7ビットコード表2枚を面切り替え)で半角英数字+半角カタカナを表現したように、JIS X 0208は8ビット文字2つでいわゆる全角英数字、全角カタカナ、ひらがな、漢字を表現した記号です。
 7ビットのコードポイントが27=128文字、8ビットのコードポイントが28=256文字なので、8ビット文字2つだと216=65,536文字を表現できそうな気がしますが、JIS X 0208には、6879文字しか収録していません。なぜでしょうか。
 これは、各バイトの0x00〜0x19までの32コードポイントは制御文字用として図形文字に使わないようにしているからです。

 制御文字は、タブが0x09、UNIXの改行が0x0Aなど、表示をコントロールするために使う特殊な文字のことで、制御文字ではない、幅を食い、目に見える字を図形文字と言います。じゃあ半角空白の「 」とか、全角空白の「 」は制御文字か図形文字かというと、解釈が分かれます。幅を食っている(大きさがある)ところを見ると四角い図形のような気がしますが、インクを消費しないところは制御文字のような気もします。白い紙に印刷すると白いまま残るが、赤い紙に印刷すると赤いまま残ります。これは印刷位置を移動しているだけで、印刷しているとは言えないんじゃないか? 難しい問題ですね。

 ASCIIのSP(スペース)は0x20ですが、これは制御文字とされています。ASCIIの0x7F(0111 1111b)はDELという呼び名で、これも制御文字です。なぜ0111 1111がDELかというと、昔紙テープ時代に打ち間違いが生じた時に全ビットに穴を空けて読み飛ばすことにしたそうです。それに対して買ってきたばっかりの、まだ1個も穴を開けていないテープは0x00(NUL)という制御文字がびっしり打たれていると考えることもできます。
 ということで、ASCIIの制御文字は0x00〜0x19および0x20と0x7Fの34文字です。ですから、ASCIIの図形文字は残りの0x21〜0x2Eまでの94文字です。

 JIS X 0208は2バイトの各バイトをASCIIに習って0x21〜0x7Eまでの94コードポイントしか使いません。このバイトが2個なので、942=8836文字しか収録できません。
 しかし、前述の通りJIS X 0208はそのうち6879文字しか収録していません。つまり空き領域があります。

 94コードポイントを持つ8ビットを2つ使うということは、94コードポイントのコード表94枚を切り替えて使うとも考えられますが、これはコード表にしにくいので、縦94マス×横94マスの正方形のコード表を考えます。これを区点コード(くてんこーど)といいます。日本語の文で使う「。」のことを句点(くてん)と言いますが、字が違うので気をつけてください。

 JIS X 0208の2バイトの1バイト目を区と言い、コード表の縦の番号とします。
 1バイト目によって定まる区の中で、2バイト目で定まるコード位置のことを点と言います。
 よって、区点コードは94区94点の正方形の文字コードです。

 空き領域は9区から15区までと、85区から94区までです(他の区にもポツポツ空きがあります)。

 1区1点は最小の区点コードで、JIS X 0208の文字コードとしては0x2121になります。
 94区94点は最大の区点コードで、JIS X 0208の文字コードとしては0x7E7Eになります。

 n区m点のことをn-mと略記します。これに習うと1区1点は1-1となります。1-1はいわゆる全角スペース( )です。

 JIS X 0208の字には文字名という名前がついていて、Unicodeという文字コード系に合わせた英語名になっています。全角スペースの文字名はIDEOGRAPHIC SPACEです。直訳すると「表意文字の空白」となりますが、表意文字の空白って何でしょうね。UnicodeではCJK(Chinese、Japanese、Korean)と呼ばれる漢字およびアジア系の字にはIDEOGRAPHICという言葉がつきがちです。たとえば「。」(句点)は「IDEOGRAPHIC FULL STOP」(表意文字のピリオド)という文字名がついています。この区点コードは1-3です。「句点の区点コードは1区3点である」ということになります。

 JIS X 0208には文字名の他に日本語通用名称という名前も参考用につけられていて、1-1「 」(IDEOGRAPHIC SPACE)の日本語通用名称は和字間隔です。

 全角数字は3-16「0」(DIGIT ZERO)(0x2331)から3-24「9」(DIGIT NINE)(0x2339)までです。
 このDIGIT ZEROという文字名はUnicodeではASCIIの0(半角のゼロ)の文字名と同じです。
 これまで半角数字、全角数字という言葉を便宜的にバンバン使ってきましたけど、JIS規格上はASCIIおよびJIS X 0201の0も、JIS X 0208の0も、ゼロはゼロで、同じ字である、ということになります。
 いま、お手元のコンピューターで、JIS X 0201と0と書いたゼロの字は縦:横が1:0.5の小ぶりの字に、JIS X 0208の0と書いたゼロの字は正方形の大ぶりの時に見えた方が多いかと思いますが、これはあくまで便宜的に2つの字を分けて両方出せるようにしているだけで、JIS規格に厳密に従う場合は、ゼロと言う字は両方同じ字で、JIS X 0201と0208を同時に使う場合はJIS X 0201ラテン文字(≒ASCII)の0x30しか使ってはいけないことになっています。
 ただ、JIS X 0201の0(0x30)は半角のゼロ、JIS X 0208の0(3-16)は全角のゼロで、2つの違う字として両方使っている実装があまりにも多いため、当面は過去との互換性のために、後者を違う字として呼んでもいい、ということになっています。このときJIS X 0208の0に与えられた名前を代替名称といいます。0の代替名称はFULLWIDTH DIGIT ZEROです。

 最も文字コードが小さい英字は大文字のエーで、3-33「A」です。文字名は「LATIN CAPITAL LETTER A」ですが、これも同じ事情でJIS X 0201ラテン文字のAと同じ名前です。両方同時に使う時はいわゆる全角形を「FULLWIDTH LATIN CAPITAL LETTER A」と言ってもいいことになっています。
 最も文字コードが大きい英字は小文字のゼットで、3-90「z」です。文字名は「LATIN SMALL LETTER Z」ですが、互換名は「FULLWIDTH LATIN SMALL LETTER Z」です。

 カタカナと句読点は事情が逆で、正式はあくまでJIS X 0208の方で、JIS X 0201と同時に使うときJIS X 0201の方の字(いわゆる半角カナ)は使ってはいけないことになっています。
 でも、JIS X 0201のァィゥェォが半角カナ、JIS X 0208のアイウエオが全角カナで違う字が2個ある、という実装が多いので、半角の方は互換名で呼んでもいいことになっています。アの互換名はHALFWIDTH KATAKANA LETTER Aです。

 JIS X 0201の右面のカタカナは句点「。」(0xA1)から。「」、・と続いて、ヲァィゥェォャュョッーとわ行のをおよび小書き(こがき)カナ(ファイルのァ、シャイロックのャおよびッなど)、長音記号が続き、そのあと0xB1からアイウエオカキクケコ…と並字(なみじ、小書きでない字をこう呼ぶそうです)のカタカナが続いています。

 一方、JIS X 0208のカタカナは小書きのァ(5-1)から始まってァアィイゥウェエォオカキクケコ…と続きます。
 これは「ファイル」「フィンランド」「フイ(不意)」「フウウン(風雲)」「フェラーリ」「フエ(笛)」のような言葉がちゃんと辞書順に並ぶように設計されているからです。JIS X 0201順にソートすると小書きカナが最初に並ぶので「ファイル」「フィンランド」「フェラーリ」「フイ」「フエ」という順番になってしまいます。
 「4箇所」のことを「4ヶ所」と書かずに「4ヵ所」と書くような小書きのヵ(KATAKANA LETTER SMALL KA)はJIS X 0201および0208にありませんでしたが、JIS X 0213で追加されました。なのでオの区点コードは5-10、カのは5-11と連続しているのに、ヵは5-85と飛んだ位置に入っています。

 ひらがなはもともとJIS X 0201にないので、4-1「ぁ」(HIRAGANA LETTER SMALL A、4-2「あ」(HIRAGANA LETTER A)からの並びだけが唯一のひらがなで、互換形(いわゆる半角ひらがな)はありません(JIS規格に準拠しないで作られた昔のパソコン、ワープロで半角ひらがなを見たことありますが…)。

 漢字はJIS X 0201にはなく、JIS X 0208で「亜」(16-1)から「熙」(84-6)まで、途中空欄を含めて第一水準2965文字、第二水準3390の合わせて6355文字が入っています。熙は細川護熙(ほそかわ・もりひろ)元首相のヒロの字です。
 漢字は1字1字意味のある名前がついていなくて、亜は「CJK IDEOGRAPH-4E9C」、熙は「CJK IDEOGRAPH-7199」のように「CJK IDEOGRAPH」(中国語、日本語、韓国語の表意文字」の後にUnicodeスカラー値(Unicodeの文字コード)がくっつけられた名前を便宜上使います。なお、カタカナやひらがなの相対的な順番はJIS X 0208とUnicodeで一緒ですが、漢字の並びは全然違うので注意が必要です。これはそのうちUnicodeを説明するときに説明します。

 以上節目の字をまとめると、

 文字/説明/JIS日本語通用名称(参考)/区点/16進コード/文字名/互換名
  /いわゆる全角空白/1-1/0x2121/IDEOGRAPHIC SPACE/互換名なし(ASCII「 」(0x20)=SPACEとは違う字)
 0/いわゆる全角のゼロ/3-16/0x2331/DIGIT ZERO/FULLWIDTH DIGIT ZERO
 A/いわゆる全角のエー/3-33/0x2341/LATIN CAPITAL LETTER A/FULLWIDTH LATIN CAPITAL LETTER A
 ぁ/ひらがなの小書きのあ/4-1/0x2421/HIRAGANA LETTER SMALL A/互換名なし(JIS X 0201にひらがなはないから)
 ァ/いわゆる全角カナの小書きのあ/5-1/0x2521/KATAKANA LETTER SMALL A/互換名なし(JIS X 0201「ア」の互換名はHALFWIDTH LETTER SMALL A)
 亜/一番文字コードが小さい漢字の亜/16-1/0x3021/CJK IDEOGRAPH-4E9C/互換名なし(JIS X 0201に漢字はないから)
 熙/一番文字コードが大きい漢字の熙/84-6/0x7426/CJK IDEOGRAPH-7199/互換名なし(JIS X 0201に漢字はないから)

 ということになります。
 空白は半角全角が違う字、英数字は半角が正式で全角は互換形、カタカナは全角が正式で半角は互換形、ひらがなと漢字は全角しかない、ということですね。

 他の非漢字では、ピリオドやカンマなどラテン由来のものは英数字と同じ扱い、句読点など日本由来のものはカタカナと同じ扱いです。まあ常識通りですね。
 JIS X 0208にしかないカタカナがあって、それはガギグゲゴなどの濁音、パピプペポなどの半濁音です(半濁音は「などの」はいらないですね!)。
 JIS X 0201は「ガ」=「カ」+「゙」のように濁点が分離するので濁音は2文字になります。

 他にギリシャ文字、キリル文字、○△□のような記号など、JIS X 0208にしかない字があります。

 一方JIS X 0201にはあるけどJIS X 0208にはない字というのもあって、それは方向のない引用符'および"です。JIS X 0208には‘’および“”という方向のある引用符しかないんです。直立の全角系はJIS X 0213で追加されました。

 今日はこんなところで許して下さい。