• 利用案内
  • サービス概要
  • 東京本館
  • 関西館
  • 国際子ども図書館
  • アクセス
  • 複写サービス
  • 登録利用者制度
  • オンラインサービス
  • オンラインサービス一覧
  • 国会関連情報
  • 蔵書検索
  • 電子図書館
  • 調べ方案内
  • 電子展示会

文字コード講座 第1回―文字コードの歴史(Unicode前史)

NDL書誌情報ニュースレター

NDL書誌情報ニュースレター2015年4号(通号35号)

【はじめに】

人類初のコンピュータは1946年に米国で開発されたENIAC(Electronic Numerical Integrator and Computer)であると言われています。当時は回路に真空管が用いられていました。その後、1947年にトランジスタ、1958年に集積回路が発明され、コンピュータの小型化が進みました。1977年にはApple社がPC(Personal Computer)「Apple II」を発表し、1981年にはIBMが「IBM PC」を発表しました。これらの開発は、米国を中心に進められました。

一方、コンピュータ・ネットワークは、1969年に米国の国防総省の高等研究計画局(現 国防高等研究計画局)が国内の四つのコンピュータ関連の大学や研究所をネットワーク回線で結んだのが端緒と言われています。これをARPANET(Advanced Research Projects Agency Network)と呼びます。ARPANETは、1983年に学術研究用のネットワークとして米国内の他のネットワークにつながれ、ネットワークとネットワークをつなぐインターネットの原型ができました。さらに、その後、米国以外の研究機関や商用利用への開放などにより、世界中に広がりました。日本では、1984年に研究用コンピュータ・ネットワークであるJUNET(Japan University NETwork)が誕生しました。

1991年には、ティム・バーナーズ・リー(Tim Berners-Lee)がWorld Wide Webを開発し、インターネットが世界中に広まりました。

文字コードはコンピュータ上で文字を扱うためのものです。その歴史は同様に米国を中心として始まり、コンピュータの性能の向上やネットワークの発達とともに広く進展してきました。

文字コードの歴史について、今号から3回にわたって連載します。今回は、アルファベットや日本の文字コードを中心に、Unicodeが普及する前の状況を中心に概説します。次回は、Unicodeの内容について、3回目は、文字コードを扱う上での留意点や当館が採用してきた文字コード等についてご紹介する予定です。

【文字が表示される仕組み】

そもそも、コンピュータに文字がどのような仕組みで表示されるか、ご存じでしょうか。文字コードの歴史を振り返る前に、まずはその仕組みを簡単にご説明します。

コンピュータ内部では、文字は、文字コード規格に基づくコード番号として記録されており、コンピュータ間でも基本的にこのデータを交換します。これを文字の形で表示・印刷するためには、該当する字形(文字のデザイン)に変換して表現する必要があり、この変換に関する情報の集合をフォントと呼びます。

たとえばJIS文字コードの場合、「3B7A」というコード番号として記録されている文字は「字」ですが、JIS X 0213(詳しくは後述)に対応しているフォントによって「字」を表すさまざまな字形に変換されて画面に表示されます(図1)。そのため、異なるフォントを使用すると、同じ文字でも字形が変わります。


図1 文字コードとコンピュータ

なお、一つのフォントがすべての言語や文字コードに対応しているということは通常ありません。たとえば、Microsoft Windowsの日本語版に標準で搭載されている「MS 明朝」というフォントは、おもに英数字と日本語に対応しており、韓国語やアラビア語などは表示できないこともあります。

【アルファベット―ASCIIとISO/IEC 646】

ASCII(American Standard Code for Information Interchange)は、米国の標準化組織であるASA(American Standards Association = 米国規格協会、現ANSI)が1963年に制定した128文字で構成される文字コード規格です[1]

英語で用いられる文字は、英数字と記号を合わせて100種類程度です。これに空白(スペース)や改行文字、タブ文字、コンピュータを制御するための制御文字などを加えても、128文字あれば十分でした。

その後、ASCIIを基に各国版の文字コードが作成されました。

ヨーロッパの言語の中には英語にはないダイアクリティカル・マーク付き文字(ä、ö、ü、â、ô、û、ç、ş、èなど)があります。また、ASCIIにはドル記号($)が含まれていますが、各国にとっては、自国の通貨記号が含まれていないと不便です。

そこで、ASCIIの一部の文字や記号のコード番号に各国独自の文字を割り当てて各国版文字コードを作成することにしました。この各国版作成のための枠組みは、ISO 646(現ISO/IEC 646)という規格で定められています。

この規格に基づき、各国の通貨記号のほか、フランスではグレーブアクセント付き文字などが、ドイツではウムラウト付き文字などが割り当てられました。日本では、ASCIIのバックスラッシュ「\」が円記号「\」に、チルダ「~」がオーバーライン「‾」に割り当てられており、英語環境と日本語環境では別の文字が表示される可能性があります(表1)[2]

表1 ISO 646(現ISO/IEC 646)に基づいた各国の文字割り当ての例
コード番号 0x23 0x24 0x40 0x5B 0x5C 0x5D 0x5E 0x60 0x7B 0x7C 0x7D 0x7E
ASCII # $ @ [ \ ] ^ ` { | } ~
日本 # $ @ [ ¥ ] ^ ` { | }
イギリス £ $ @ [ \ ] ^ ` { | } ~
ドイツ # $ § Ä Ö Ü ^ ` ä ö ü ß
フランス £ $ à ° ç § ^ µ é ù è ¨
<文字コードに関連する用語>
「文字コード」という用語には、文字集合(符号化文字集合)、符号位置(符号点、コードポイント)、エンコーディング(符号化)という三つの概念が含まれています。
  • 文字集合:どのような文字が含まれるかということ
  • 符号位置:文字集合内の各文字の位置(付与されている番号をコード値やコード番号という)
  • エンコーディング:文字集合をコンピュータで扱えるデータ に変換する方法(エンコード法、符号化方式)
文字コードに関する文書を読む際には、どの概念に関して述べられているのかを理解する必要があります。
たとえば、「「A」という文字はASCIIの文字コードの範囲にある」とか「ASCIIの「A」の文字コードは0x41だ」というように、文字集合にも符号位置にも文字コードという用語を用いるのが一般的です。特に、符号位置という用語は一般には用いられず、単に文字コードと呼ぶ場合が多いので、注意が必要です。
<文字コード符号位置の表現>
符号位置は16進数で表すのが一般的です。たとえば、「A」のASCIIコードは1000001ですが、1000001の16進数は41で、16進数を表す0xを先頭に付けて0x41と表します。

【日本の文字コード(1)片仮名―JIS X 0201】

日本でも、英数字等を表現するためには、ISO 646(現ISO/IEC 646)の文字集合を用います。しかし、日本語を表現するには、片仮名、平仮名、漢字などを含む文字コードを定める必要があります。

日本語用の文字コードとして最初に制定されたJIS文字コードには片仮名が含まれました。片仮名と日本語固有の句読点を合わせると約60文字[3]になります。これをISO 646(現 ISO/IEC 646)の英数字128文字と同時に用いるためには、約190文字の文字集合が必要となり、256文字を表現できる8ビットが必要となります。

そのため、日本では、1969年にISO 646(現ISO/IEC 646)を8ビットに拡張し、片仮名や句読点を加えたJIS X 0201(当初はJIS C 6220-1969)という独自の規格を定めました[4]。この規格は一般的にANK(Alphabet Numeric and Kana)と呼ばれています。

<ビット(bit)>
コンピュータで扱うデータの最小単位であるビットは、binary digit (2進数の数字)の略で、2進数の1桁を意味します。2進数は0と1で数を表現する方法で、0と1のみから構成される7桁の数字で128通り(2の7乗=128)を表現できます。
ASCIIおよびISO/IEC 646で定められている128文字の場合、7ビットあれば各文字に一意の数字を割り当てることで識別可能となり、JIS X 0201で定められている190文字の場合は、2の8乗、つまり、256文字を表現できる8ビットが必要となります。

【日本の文字コード(2)漢字―JIS X 0208(JIS基本漢字)】

つぎに、漢字を表現できる文字集合として、JIS X 0208(当初はJIS 6226-1978)という規格が定められました。この規格には、片仮名、平仮名、漢字、ギリシア文字、キリル文字、郵便記号や罫線素片などの日本独自の記号など6,879字が含まれています。

文字は、コンピュータの性能に応じて扱う範囲を選択できるように、使用頻度によって第1水準と第2水準に分けられました。第1水準には、記号、当用漢字、人名用漢字などのより一般的に用いられる文字が含まれています。

なお、この文字集合には、JIS X 0201で定められている英数字、片仮名、記号なども含まれています。JIS X 0201とJIS X 0208を区別するため、前者の文字を後者の文字の半分の幅で表示することが多く、一般的にこれを半角文字と呼びます。

JIS X 0208は、日本語を表現するための文字集合の基礎となっている規格で、「JIS基本漢字」と呼ばれることがあり、1978年に最初の規格が制定された後も、1983年(第2次規格)、1990年(第3次規格)、1997年(第4次規格)、2012年(第5次規格)に改定されています。

改定時には、字体の変更、入替、追加等が行われました。拡張新字体という、従来の漢和辞典には存在しなかった字体が作成されたこともあり、規格間で整合性がとれなくなるという問題が発生しました。

【日本の文字コード(3)JIS X 0212(JIS補助漢字)】

1990年には、JIS X 0208:1983(第2次規格)に含まれない使用頻度の低い6,067字で構成された規格として、JIS X 0212が制定されました。この規格は、「JIS補助漢字」と呼ばれることがあります。JIS X 0208と組み合わせて利用することを想定して作成されましたが、後述のとおり、現在では、ほとんど使われることがありません。すべての文字が次回紹介するUnicodeに含まれているため、Unicodeを用いれば表現可能です。

【日本の文字コード(4)JIS X 0213(JIS拡張漢字)】

2000年には、JIS X 0213という新たな規格が制定されました。JIS X 0208の6,879字に加え、第3水準の漢字1,259字(うち、10字は2004年の改定時に追加)、第4水準の漢字2,436字、非漢字659字が収録されています。つまり、JIS X 0213は、JIS X 0208の文字に4,354字を追加した規格で、「JIS拡張漢字」とも呼ばれます。2004年(第2次規格)、2012年に改定されています。

JIS X 0212とは異なる基準で選定されていますが、約2,900字が重複しています。この規格が普及したため、JIS X 0212はほとんど使われることはなくなりました。

ここで一度、JIS文字集合の関係を整理してみます(図2参照)。
JIS X 0221(UCS/Unicode)は他のすべてのJIS文字コードを包含します。
JIS X 0213はJIS X 0208を包含します。
JIS X 0213とJIS X 0212は一部の文字が重複します。


図2 JIS文字集合の関係概念図

<区点と面区点>
JIS X 0208やJIS X 0212では、1~94の区と、同じく1~94の点の組み合わせにより文字の符号位置を表わしていました。この方法を区点と呼びます。たとえば、「亜」という文字は16区1点の位置にあり、16-01などと表されます。
さらに、JIS X 0213では、元々JIS X 0208で定義されていた領域と、新たに文字を追加した領域の二つの領域を持つようになったため、それぞれの領域を1面、2面と呼ぶようになりました。この方法を面区点と呼びます。たとえば、「亜」という文字は、JIS X 0213では1面16区1点の位置にあり、1-16-01などと表します。
もちろん、前述のように16進数(3021)でも表現可能です。

【JIS漢字(ISO 2022-JP)】

これまで見てきたとおり、日本国内だけでも複数の文字コード規格が策定されました。文字コード規格が異なれば、同じコード番号に異なる文字が割り当てられている可能性があります。そのため、多種多様なコンピュータが正しく情報交換を行うためには、文字集合が変わるたびに、どの文字集合なのかを明示する必要があります。ISO/IEC 2022(JIS X 0202)はこの方法を定めた規格で、Unicodeの登場前は、インターネットではISO/IEC 2022に従って文字を送信する必要がありました。

ISO/IEC 2022の日本語の文字集合をISO 2022-JPと呼びます。当初は、ASCII、JIS X 0201のローマ字部分、JIS X 0208(JIS X 0208:1978およびJIS X 0208:1983)から構成されており、一般に「JIS漢字」や「JISコード」と呼ばれていました。後にJIS X 0212、JIS X 0213が追加されました。

ISO 2022-JPでは、それぞれの文字コードが始まる部分にエスケープ・シーケンスと呼ばれる特殊な符合を付与して、文字集合を切り替えます(表2)。

表2 ISO 2022-JPのエスケープ・シーケンス
文字コード エスケープ・シーケンス
ASCII(ISO/IEC 646 IRV) ESC ( B
JIS X 0201:1976(ローマ字部分) ESC ( J
JIS X 0208:1978(JIS C 6226-1978) ESC $ @
JIS X 0208:1983 ESC $ B

【Shift JIS】

ISO 2022-JPでは、漢字とASCIIや半角カナ文字等を混在させるためにエスケープ・シーケンスを用いますが、この方法では文字の処理に時間がかかるという欠点がありました。一方で、これらの文字を、エスケープ・シーケンス等による文字の切り替えを行わずに混在させる方法として、マイクロソフト社などが考え出した文字コード体系を「Shift JIS」(S-JISと略されることがある)と呼びます。

具体的には、JIS X 0201で使用されていない領域(0x80~0x9Fまでと、0xE0~0xFFまで)が先頭バイト(第1バイト)になるように(図3)、JISコードを移動(シフト)させています。たとえば、「右」の符号位置は、JIS X 0208では0x3126、Shift JISでは0x8945で、その次の「宇」の符号位置はJIS X 0208では0x3127で、Shift JISでは0x8946です。


図3 JIS X 0201の未使用領域

一方、Windowsの機種依存文字を含む文字集合であるCP932(Code Page 932 = Windows-31J)もJIS X 0208:1990と同じ文字集合を含むことから、JIS X 0208:1990にWindowsの機種依存文字を追加したものをShift JIS と呼ぶことがあります。

<機種依存文字>
機種依存文字は、機種によって異なる文字が表示・印刷される文字コードのことです。
日本語の文字コードの場合、JISの文字集合に含まれない文字や記号を各PCメーカーが導入したため、一部の文字が、WindowsとMacintoshのPCでは異なる文字として表示されるなどの状況が発生しました。たとえば、Windowsで「丸付き数字1」と入力した文字は、Macintoshでは「括弧付き日」と表示されました。
そのため、Unicodeが登場するまでは、これらの文字コードは、メールなどの情報交換には使わないのが原則でした。

機種依存文字の例
丸や括弧付き数字、ローマ数字、ミリ・キロなどの単位、元号、括弧付き漢字、絵文字など

【おわりに】

これまで見てきたように、コンピュータの性能が高まるにつれて、より大きな文字集合を扱うことができるようになりました。英数字と記号のみだった文字コードに、ヨーロッパ諸国ではダイアクリティカル・マーク付き文字などが、日本では片仮名、平仮名、漢字などが追加されていき、世界中で多種多様な文字コードが制定されました。

英数字と記号のみのASCIIは1963年、ヨーロッパ諸国の独自文字を収録したISO R 646(現ISO/IEC 646)は1967年、片仮名を収録したJIS(JIS X 0201)は1969年、漢字などを収録したJIS(JIS X 0208)は1978年に登場しました。当初、一台のコンピュータで複数の文字コードを同時に扱うことは基本的にできませんでした。そのため、異なる文字コードを用いているコンピュータ間で通信を行う時には、特殊な処理を行っていました。

しかし、ネットワークが発達し、世界中のコンピュータが接続されるようになる1980年代から、世界中の言語の文字を一つのコード体系に収めた文字集合を作ろうという動きが出てきます。次回は、そのために考案されたUnicodeについてご紹介します。

上綱 秀治
(かみつな しゅうじ 電子情報部 電子情報企画課)

※お詫びと訂正
本記事の一部に誤りがあり、訂正いたしました。

【はじめに】
JIS X 0213は2000年制定、Unicodeは1993年制定でしたので、下記のように訂正いたしました。
(訂正前)Unicodeが出現する前の状況を概説します。
(訂正後)Unicodeが普及する前の状況を中心に概説します。

【Shift JIS】
(訂正前)それを改良するため、マイクロソフト社などが考え出した文字コード体系を
(訂正後)一方で、これらの文字を、エスケープ・シーケンス等による文字の切り替えを行わずに混在させる方法として、マイクロソフト社などが考え出した文字コード体系を

誤りがありましたことお詫び申し上げます。
さらに、脚注[4]を追加いたしました。

[1]ASA X3.4-1963。現在の規格番号は、ANSI INCITS 4-1986。

[2]円記号とチルダについては、第3回で解説する予定です。

[3]「ガ」や「パ」などの、片仮名と濁音・半濁音記号の合成文字は含みません。

[4]JIS X 0201には、英数字と片仮名の二つの7ビット符号化文字集合を用意し、制御文字(SHIFT-OUTとSHIFT-IN)によって切り替える方式も規定されています。

参考文献
加藤弘一. 図解雑学文字コード. ナツメ社, 2002, 237p.
小林龍生ほか編. インターネット時代の文字コード. 共立出版, 2002, 285p.
芝野耕司編著. JIS漢字字典. 増補改訂. 日本規格協会, 2002, 527p.
トニー・グラハム. Unicode標準入門. 乾和志, 海老塚徹訳, 関口正裕監修. 翔泳社, 2001, 455p.
三上喜貴. 文字符号の歴史 アジア編. 共立出版, 2002, 377p.
安岡孝一, 安岡素子. 文字符号の歴史 欧米と日本編. 共立出版, 2002, 286p.
矢野啓介. プログラマのための文字コード技術入門. 技術評論社, 2010, 383p.
Ken Lunde. CJKV日中韓越情報処理. 小松章, 逆井克己訳. オライリー・ジャパン, オーム社 (発売), 2002, 1128p.


このページの先頭へ

NDL書誌情報ニュースレター(年4回刊)

ISSN 1882-0468/ISSN-L 1882-0468
2015年4号(通号35号) 2015年12月24日発行

編集・発行 国立国会図書館収集書誌部

〒100-8924 東京都千代田区永田町1-10-1

メールアドレス:bib-newsアットマークエヌディーエルピリオドジーオーピリオドジェーピー(ニュースレター編集担当)