見出し画像

JIS漢字の制定 - 1978年

パソコンに限らずコンピュータで日本語の漢字を扱うのであれば、漢字に番号を振ってコード化しなければなりません。それまでに漢字の集合として規定されていたものといえば、学校で学ぶ当用漢字(現在の常用漢字で1945字)であるとか戸籍に登録できる人名漢字(1000弱)といったものしか決められていません。他にも新聞の印刷に使われる新聞漢字(約2000字)もありましたが、一般的に使われている漢字だけをとっても4000字程度と言われており、大漢和辞典には5万字ほどの漢字が収録されています。

日本の「漢字表」

これらの中には同じ漢字であるにも関わらず細かな表現が異なる異体字というものも含まれており、コードを定めるには、その表現と対応させなければなりません。そこで表現する図形を例示し、その図形に対してコードを振って漢字コードを作り上げました。これが最初のJIS漢字コード(JIS C 6226-1978)です。この時にコードを割り振るのに符号点(コードポイント)という考え方を採用し、2次元の区と点を使った表を使いました。

符号点

ひとつの区には94個の点があり区も94個あります。これで8836種類の文字が表すことが出来るわけです。この中には漢字だけではなく、カタカナやひらがな、英数字も含まれます。さらによく使われる記号と共にギリシャ文字とキリル文字、そして罫線を構成する図形も含まれています。これらは区ごとにグループ化され1~8区にはこれらの漢字ではない文字が収録されています。漢字は全部で6349文字が選ばれ、すべての漢字をサポートするのが当時のコンピュータの能力では難しいと考え、使用頻度の高い文字を第1水準(16~47区)、比較的頻度の低いものを第2水準(48~84区)にわけました。異体字は整理され代表的なものだけを採用しました。9~15区および85区~94区までを空き領域(未定義)としましたが、規格の上ではこれらの空き領域を自由に定義できる外字として使うことはご法度です。

これが旧JISまたが78JISなどと呼ばれるJIS漢字コードです。

JIS漢字コード

JIS X 0208

さて、この区点コードをどのように使うかについては、もう一段階が必要です。そもそもどうして94個ずつのグループにしたのかと言うとASCIIで7ビットで表すことができる128文字のうち制御文字を除いた図形文字の領域が94文字になるからです(後半96文字のうち空白とDELは図形文字ではない)。これをISO/IEC 646のルールに従ってエスケープシーケンスを使ってJIS漢字の文字集合に切り替えて使うのです。

ISO/IEC 2022

漢字コードの話

ということで、漢字を使うときにはISOに登録されているJIS漢字コードに対するエスケープシーケンス”1B 24 40 (ESC $ @)”でGLをG0に切り替え、GLは0x20から始まるので区および点に0x20を加えたコードを2バイト使って漢字コードを指定します。

“全角空白” 1区1点 0x2121
“◆”            2区1点 0x2221
“亜”           16区1点 0x3021

そして漢字が終わり普通のASCIIに戻るときには”1B 28 4a(ESC ( B)”を使います。具体的に示すと「かな漢字a」という文字列を表すには、”1B 24 40 24 2B 24 4A 34 41 3B 7A 1B 28 4A 61(ESC-$@かな漢字-ESC-(Ba)”です。これをエスケープを”.”としてASCIIで示すと”.$@$+$J4A;z.(Ba”と見えるわけで、どこかで見た覚えのあるような文字列になるわけです。

あれ?少し違うんでないかい?と気がついた方もいるでしょうが、このコードは今では旧JISと呼ばれているコード体系で、元々この規格は定期的に見直されることになっており1983年に改訂され、その際に収録されている漢字やエスケープシーケンスなど、いろいろな変更がありました。公式には1987年に廃止されているのですが互換性維持のためにPC-9801などでは最後までこの規格が使われ続けていましたし、今でもプリンタなどではサポートされていることもあります。この切り替えでもいろいろな混乱があったのですが、それはまた別の機会にでも。

JIS C 6226-1978

エスケープシーケンスでモードを切り替えるという方法は通信などの伝送路では使いやすいのですが、メモリの中で漢字を含む文字列を処理する場合、文字数とバイト数の関係が複雑になりますし、必ず最初から読んでいかないと特定のバイトがASCIIなのか漢字なのかがわかりません。文字を削除したり追加したりするたびに正しいエスケープシーケンスになっているかを確認しなければなりません。

ということでJISコードも決まり漢字を扱えるようになったものの、JISはあくまで「交換用コード」であって内部処理であったり、ディスクに格納するコードに関しては機種ごと、OSごとに独自の実装が開発されていったんです。こうして日本語の文字コード、日本語固有の処理に対してのややこしい世界が始まりました。

ヘッダ画像は、いらすとやの以下の画像を加工して作りました。https://www.irasutoya.com/2020/11/blog-post_58.html

#文字コード #JIS漢字 #旧JIS #C6226 #X0208 #区点コード #エスケープシーケンス

いいなと思ったら応援しよう!