4. JISコード 

   4−1  JISコードとは
   4−2  半角ローマ字・半角カタカナ (1バイト文字)
   4−3  全角文字 (2バイト文字)
   4−4  旧JIS・新JIS
   4−5  JIS X 0213
   4−6  ISO-2022-JP


4−1  JISコードとは

JISは日本工業規格 ( Japanese Industorial Standard ) の略称で、 工業製品の様々な規格を定めています。各電子機器で使われるデータの互換性を確保するため、 文字コードもJISによって定められてるわけです。 JISコードの正式な名称は、「情報交換用符号化文字集合」といいます。 何度かの改訂を経て、現在は2000年に制定された「JIS X 0213」が主に使われています。
JISで規定されている文字コードには、次のようなグループがあります。

◆ 制御文字 (1バイト文字 JIS X 0211)
  0x00 〜 0x1F, 0x7F,0x80 〜 0x9F
  ASCIIコードのコンソール制御文字を当てます。
◆ 半角文字(ANK文字) (1バイト文字 JIS X 0201)
  半角ローマ字
  半角カタカナ
◆ 全角文字 (2バイト文字 JIS X 0208)
◇JIS第一水準文字(3489字)
  英数字,ひらがな,カタカナ,記号 524字
  漢字 2965字
◇JIS第二水準文字(3390字)
  漢字、部首の形
◆ JIS補助漢字 (2バイト文字 JIS X 0212)
  漢字  5801字
  非漢字  266字
◆ JIS第三水準・第四水準漢字 (2バイト文字 JIS X 0213)
  第三、第四水準あわせて約5000字


4−2  半角ローマ字・半角カタカナ (1バイト文字)

俗にいう半角ローマ字・カタカナ=JIS1バイトコードを定めた JIS X 0201 の正式名称は、「7ビット及び8ビットの情報交換用符号化文字集合」といいます。 国際規格 ISO 646 に準拠して日本で制定されました。規定されている 文字の種類から、ANK文字などとも呼ばれます。(Arphabet, Numbers, Katakana)
半角ローマ字に関して ASCII と異なるのは、0x5C が '\' から '¥' へ、 0x7E が '〜' から ' ̄' へ変えられていることぐらいです。
ところが、1997年の JIS X 0208 (後述する全角文字のための規格)改訂に際して、 正式に「JIS X 0201 カナの方は将来的には削除する」(附属書1)と明記されました。 過去資産との互換性を考え、当分はどのコンピュータもJIS半角カナを扱えるような仕組みを残すでしょうが、将来にわたっての表示、 印刷可能性は保証されません。
正式名称にある通り、7ビット符号(JIS7)、8ビット符号(JIS8)の2種類が規定されています。

  ◆ JIS X 0201 の半角ローマ字・半角カタカナ ◆

◇7ビット符号(JIS7)◇
○第1面
|+0123456789ABCDEF(下位)
00| ←制御コード
10|   JIS X 0221→
20| !"#$%&'()*+,-./
30| 0123456789:;<=>?
40| @ABCDEFGHIJKLMNO
50| PQRSTUVWXYZ[\]^_
60| `abcdefghijklmno
70| pqrstuvwxyz{|}¯DL

○第2面
|+0123456789ABCDEF(下位)
00| ←制御コード
10|   JIS X 0221→
20|  。「」、・ヲァィゥェォャュョッ
30| ーアイウエオカキクケコサシスセソ
40| タチツテトナニヌネノハヒフヘホマ
50| ミムメモヤユヨラリルレロワン゙゚
60|
70|
(上位)
◇8ビット符号(JIS8)◇

|+0123456789ABCDEF(下位)
00| ←制御コード
10|   JIS X 0221→
20| !"#$%&'()*+,-./
30| 0123456789:;<=>?
40| @ABCDEFGHIJKLMNO
50| PQRSTUVWXYZ[\]^_
60| `abcdefghijklmno
70| pqrstuvwxyz{|}¯DL
--------------------------
80| ←制御コード
90|   JIS X 0221→
A0|  。「」、・ヲァィゥェォャュョッ
B0| ーアイウエオカキクケコサシスセソ
C0| タチツテトナニヌネノハヒフヘホマ
D0| ミムメモヤユヨラリルレロワン゙゚
E0|
F0|
(上位)
※ 半角カナは、UNIX系の端末では
表示されないかも知れません。

7ビット符号(JIS7)の方では、単に文字コードを並べただけでは半角ローマ字とカタカナの区別がつかなくなってしまいます。
例えば半角カタカナ 'ア' は本来 0xB1 というコード番号ですが、JIS7では8ビット目を扱わないので (下図の赤い数字のみを問題にするということ)、 0x31 すなわち半角数字 '1' と区別がつきません。
文字1  
16進数 
ビット0110001   0110001
 
第8ビット
  
第8ビット
そこでJIS7では、カナとして扱いたい文字列の前後に、「今から半角カナ(第2面)だ」 「今からローマ字(第1面)に戻す」という情報を意味する制御コードを挟み込んで、面を切り替える方法が採られます。
JIS X 0201 の元となった ISO-646 で定められている制御コード「シフトイン(SI)」「シフトアウト(SO)」を挟む方法や、 後述する ISO-2022-JP のエスケープ・シークエンスを挟む方法などがあります。


4−3  全角文字 (2バイト文字)

俗に全角文字といわれる文字には、いくつかのグループがあります。
  ・JIS X 0208 〜 JIS第1水準・第2水準
  ・JIS X 0212 〜 JIS補助漢字
  ・JIS X 0213 〜 JIS第3水準・第4水準
このうち最も一般的に使われている JIS X 0208 の正式名称は 「7ビット及び8ビットの2バイト情報交換用符号化漢字集合」です。
これら2バイト文字コードには、共通して以下の2通りの表現方法があります。

 ◆ JIS区点番号 ◆
JISの採用文字一覧表の正式な形といっていいものです。
文字の配列を4桁の10進数で表現したもので、前の2桁を「区」(第01区〜94区)、 後の2桁を「点」(第01点〜94点)と呼びます。つまり、JIS全角文字は第1区〜第94区という94個のブロックに仕切られ、 各ブロックには第1点〜第94点に位置する94個の文字が配置されているということです。
理屈上は 94×94 = 8836 文字まで配置可能ですが、拡張用の未定義領域を残してあるので、 実際は第1、第2水準で約 6,800 文字が配置されています。

ちなみに、なぜ94×94などという中途半端な数字なのかと言うと、 次に述べるJIS16進数コード(2バイトコード)との兼ね合いです。 JIS X 0211 制御コードの領域(0x00〜0x20, 0x7F)を避けて、第1バイト・第2バイトともに 0x21 〜 0x7E (10進数で 33 〜 126) つまり94個分の範囲しか用いていないのに合わせてあるのです。


 ◆ JIS X 0208 区点番号の例 ◆

01区|+12345678910 〜第1水準・記号
 00| SP、。,.・:;?!
 10| \゜´`¨^ ̄_ヽヾ
 20| ゝゞ〃仝々〆〇ー―‐
 : |
 80| ¢£%#&*@§☆★
 90| ○●◎◇

16区|+1234578910 〜第1水準・漢字  
 00| 亜唖娃阿哀挨姶逢葵
 10| 茜穐悪握渥旭葦芦鯵梓
 20| 圧斡扱宛姐虻飴絢綾鮎
 : |
 80| 茨芋鰯允印咽員因姻引
 90| 飲淫胤蔭

'愛'という字は16区の06点に位置し、 区点番号=1606 となります。

 ◆ JIS16進数コード ◆
JIS区点番号一覧をコンピュータで扱いやすいように、4桁の16進数(2バイト)で符号化した文字コードです。 上述の理由から、第1バイト・第2バイトともに 0x21 〜 0x7E の範囲の数字のみを当てています。 従ってJIS16進コードは 0x2121 〜 0x7E7E の範囲となります。


 ◆ JIS X 0208 16進コード ◆

 \|+012345789ABCDEF
    |
2120|  SP、。,.・:;?!\゜´`¨ ↓↓↓第1水準↓↓↓
2130| ^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/
 :  |
2330| 0123456789
2340|  ABCDEFGHIJKLMNO
 :  |
2420|  ぁあぃいぅうぇえぉおかがきぎく
2430| ぐけげこごさざしじすずせぜそぞた
 :  |
3020|  亜唖娃阿哀挨姶逢葵茜穐悪握渥
3030| 旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或
 :  |
 :  |
5020|  弌丐丕个丱丶丼丿乂乖乘亂亅豫亊 ↓↓↓第2水準↓↓↓
5030| 舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗
5040| 仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻
 :  |
 :  |

'愛' という字のJIS16進コードは 0x3026 です。


4−4  旧JIS・新JIS

JIS第1水準・第2水準漢字を規定する JIS X 0208 は、何回か改訂されました。
このうち、1983年の改訂が非常に大幅な変更だったため、1978年に制定された JIS X 0208:1978 を旧JIS、JIS X 0208:1983 以降を新JISと呼んで区別することがあります。
1990年頃まで日本のパソコンシェアのトップだったNEC PC-9801 シリーズがかたくなに旧JISを採用し続けたため、 2000年頃までは混乱の元でした。

◆ 字形変更の例 (200字以上) ◆
区点旧JIS新JIS
1810

◆ 字形変更+追加の例 (4組) ◆
区点旧JIS新JIS
追加
2238
8401 堯
4558
8403 遙

◆ 字形交換の例 (22組) ◆
旧JIS新JIS
1809 鶯8284 鴬1809 鴬8284 鶯
2050 諫7521 諌2050 諌7521 諫
3659 壺5268 壷3659 壷5268 壺
4116 檜5956 桧4116 桧5956 檜

98シリーズのパソコンも一般の職場・家庭では見かけることがなくなり、Windows も Windows10 が普及してきた現在、 旧JIS、新JISといった言葉もほぼ聞かれなくなりました。


4−5  JIS X 0213

JIS X 0213は、JIS X 0208:1997を拡張する目的で、2000年に制定されました。 主な変更点は、記号、符号などの追加と、第三・第四水準漢字などの正式サポートです。 JIS X 0208 と比べ、計約4000字追加されました。
第三・第四水準漢字をサポートするためには1万字以上の区点番号が必要ですが、従来の区点 94×94 = 8836 では足りません。 そこで、区点の概念が拡張されて「面」という範疇が作られました。 JIS X 0213 の区点コードは、「面-区-点」で表されます。 記号〜第三水準漢字までは「1面」とし、第四水準漢字は「2面」に振り分けられています。

また、この規格は、2004年に改定されています(JIS X 0213:2004)。 この時、168字の字形を従来のものから変更しているのですが、Windows が VISTA から JIS2004 を正式に採用し、 日本語フォントのMS明朝、MSゴシックをこの最新版に合わせたことから、古いWindows(のフォント)とVISTA以降(のフォント) との間で、かつての新JIS、旧JIS問題を彷彿とさせるような問題が生じました。
人名漢字などに正確を期したい場合、古いPCと新しいPCが混在している環境だと、 「どのPCで出力したかで、'辻'という字のしんにょうの点が1個になったり2個になったり」 ということが起こり得ます。素人には、「どこが問題なのか」からしてわかりづらく、なかなかやっかいな問題でした。

◆ JIS X 0213:2004の字形変更例(一番右が Windows VISTA 以降) ◆
JIS X 0213:2004の字形変更
(http://www.asahi-net.or.jp/~ax2s-kmtn/ref/jisrev.htmlの情報を加工させていただきました)

Windows10 が登場し、Windows XP の正式サポートも切れた 2018 年現在、WindowsXP 以前のPCを使われている職場環境・ 家庭も少なくなってきていることと思います。Windows XP の完全引退とともに、上記の問題も解消されるでしょう。


4−6  ISO-2022-JP

7ビット符号体系において、半角ローマ字・半角カナ・全角文字は、 単にコードを1バイト単位で見ただけではどの文字種なのか区別できません。
例えば、全角文字 '愛' を表わすコード 0x3026 は、そのままでは半角ローマ字2文字からなる文字列 "0&"とも、 半角カナ2字からなる"ーヲ" とも区別がつきません。
文字

0&
16進数
3026
3026
3026
種類
全角1文字
英数2文字
カナ2文字
インターネット上で、半角・全角文字を切り替えながらJISコード(JIS7のみ) を処理するための標準的な決まりが ISO-2022-JP です。 "ISO−" とありますが、国際規格 ISO 2022 (こちらは8ビット符号も規定しています) そのものではありません。
0xIB (ESC) で始まることから「エスケープ・シークエンス」と呼ばれる制御コードによってコードの種類を切り替えて、 半角ローマ字、半角カナ、全角文字を混在させます。 制御文字も含めすべてのコードが 0x00 〜 0x7E の間に収まっているため、 7ビット符号しか受け付けないシステムも多いインターネットメール・ニュース関係と親和性の高い規格です。
現在の所、中国語、韓国語との混在まで考慮できる ISO-2022-JP-2 までありますが、 この章ではひとまずJISの範囲に収まっている ISO-2022-JP-1 で使われる文字種を紹介します。
エスケープシーケンス文字種
0x1B 0x28 0x42[ESC] ( BASCIIコード
0x1B 0x28 0x4A[ESC] ( JJIS X 0201 (半角ローマ字)
0x1B 0x24 0x40[ESC] $ @JIS X 0208:1978 (全角 旧JIS)
0x1B 0x24 0x42[ESC] $ BJIS X 0208:1983 (全角 新JIS)
0x1B 0x24 0x44[ESC] $ DJIS X 0212 (補助漢字)
↓↓ 規定外だが使える場合が多い ↓↓
0x1B 0x28 0x49[ESC] ( IJIS X 0201 (半角カナ)

ISO-2022-JP では、基本的に「JIS X 0201 半角カナは使わない」 という決まりになっています。 ただし、送信側、受信側双方のアプリケーションが [ESC] ( I をサポートしていれば利用できる場合も多いようです。
例えば "1組☆" ("1"と""は半角) という文字列を表現するには、実際には以下のようなコードとなります。 (コードの数字は16進数)

文字
半角英数 1 全角 半角カナ 全角
コード
1B284A 31 1B2442 472F 1B2849 32 1B2442 4148 2179

8バイトの文字を表現するのに、20バイト必要です。
エスケープ・シークエンスは、切り替えのたびに3バイトものデータが付け足されてゆくので、 半角文字と全角文字が混ぜこぜになっているような文書では、これだけでかなりのデータ量をくってしまいますし、 表示文字数と実際のデータ量が異なるわけですから、プログラムを開発する側からすると、複雑な処理を作らなければなりません。 コンピュータ内の内部処理には向かない規格です。
そのため、データ量のスリム化、処理の簡素化などを目的として、「シフトJIS」というコード体系が考え出されました。