みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

JIS、SHIFT-JIS、EUCはなぜできた?

教えてください。
文字コードについて調べています。アルファベットはASCIIコードで統一されているために、特に問題がなく、日本語にも JISコードという標準化されているコードがあります。
なので、基本的にはこれをみんなが使えば、文字化けなどという問題には悩まされなくてすむはず。

なのに、なぜ Windows では Shift-JISなどという独特な文字コードを使い、UNIX系では EUCコードを使っているのでしょう。いったい、どの文字コードが一番初めにできて、なぜそれで標準化を図ることができなかったのかなど、日本語文字コードに関する歴史について、ご存知の方、ぜひ教えていただければ幸いです。

投稿日時 - 2003-05-18 20:22:19

QNo.551156

困ってます

質問者が選んだベストアンサー

最初に制定されたのは『JIS』です。

『JIS』では、半角(1バイト)文字と全角(2バイト)文字が混在した文字列中で、それぞれを区別するために、エスケープシーケンスと呼ばれるコードを挿入します。
特定のエスケープシーケンスの後に続くコードをASCII文字コードや漢字コードと解釈するというものです。

ISO-2022-JPで制定されているエスケープシーケンスは、

[ESC] ( B :0x1B 0x28 0x42:以降ASCII文字
[ESC] ( J :0x1B 0x28 0x4A:以降半角カナ
[ESC] $ @ :0x1B 0x24 0x40:以降JIS-1978漢字
[ESC] $ B :0x1B 0x24 0x42:以降JIS-1983漢字

しかし、このエスケープシーケンスで文字コードを指定する方式では、半角と全角が混在している文字列では、文字数とバイト数が混在の仕方で大きく変わってきます。

例えば、今日の日付(5月18日:5と18を半角表記)を『JIS』で表記すると、"5"と"月"の間に3バイト、"月"と"1"の間に3バイト、"8"と"日"の間に3バイト、それぞれエスケープシーケンスコードが入り(5の前のエスケープシーケンスはデフォルトの指定がASCII文字という決まりなので、省略が可能)、単純に考えれば7バイトで足りる所が16バイトも必要になります。(ISO-2022-JP-3では、漢字コードのエスケープシーケンスが4バイトになっているので、18バイトも必要)

そこで、もう20年ほども前のことですが、『Microsoft社』が『MS-DOS』を日本製のパソコンに移植するに際し、『JIS』の「無駄にバイト数を必要とする」という欠点を解消するべく、日本の『ASCII社』(月刊ASCIIとかを出版しているPC雑誌の老舗)と共同開発したのが『Shift-JIS』です。

『Shift-JIS』では、漢字コードの1バイト目を、ASCII文字やJIS半角カナ文字のコードと重ならない0x81~0x9F、0xE0~0xEFにシフトすることで、1バイト目がこの範囲のコードだったら、2バイト目とあわせて2バイトの漢字コードと判断するという仕組みです。

『EUC』は同様の目的で、『AT&T社』によって制定され、UNIX環境での事実上の標準日本語コードとなっていますが、『EUC』自体は、日本語だけでなく複数の文字セットを同じテキスト内で処理することが可能になっています。

ASCII    :0x21~0x7E
半角カタカナ :0x8E(1バイト目)+0xA0~0xFF(2バイト目)
漢字     :0xA0~0xFF(1バイト目)+0xA0~0xFF(2バイト目)
補助漢字   :0x8F(1バイト目)+0xA0~0xFF(2バイト目)+0xA0~0xFF(3バイト目)

『Microsoft社』(と『ASCII社』)が『Shift-JIS』を開発し、自社製の『MS-DOS』や、その後継OSである『Windows』に採用したために文字コードの規格としては圧倒的なシェア(シェアというのかどうか???ですが)を誇り、『ISO-2022』にも『JIS規格』にも定められていないにもかかわらず、相変わらず使われているわけです。

こんな所でよろしいでしょうか?

投稿日時 - 2003-05-18 21:44:15

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

各文字コードには長所、短所があるため、それぞれの理由で使われてます。

JISが正規な物で、通信に使うべきものです。
ただ、コンピュータ内部では別な文字コードを使ってもかまいません。
実際、JISはコンピュータで処理が面倒ですし、MS-DOS当時のマシンでは実用的には使えなかったので、
扱いやすい文字コードとして決められた物がShift JISです。
ただし、速度優先のためいろいろと問題があります。
現在も使われているのは、互換性のためでしょう。

EUCもおそらく内部の処理が複雑になるのを避けるために文字コードを決めたと思いますが、
Shift JISのコードが持つ問題が、既存のUNIX用のソフトに与える悪影響が多すぎるため、
問題の無いコードとしてEUCを決めたと思われます。
ただ、Shift JISを使った物もありましたが。

でも、結局コンピュータ内部で何を使っていても、外部とは全てJISで通信するということを守っていれば問題無いのですが、
内部のコードであるShift JISやEUCをそのまま外部にだしてところが多いのが現状です。

そういえば、UNICODEもありますが。

投稿日時 - 2003-05-19 00:32:48

ANo.1

OSも今のようにオープンではなく、独自路線で
進んできたことも要因でしょう。
近年になりオープンシステム化が進み、かつ、インターネットの普及とともに、文字コードの相違が目立つようになりました。
そこで(ということでもないですが)でてきたのがUnicode。
すべての文字を16ビット(2バイト)で表現し、1つの文字コード体系で多国語処理を可能にしようとするもの。世界の主要な言語のほとんどの文字を収録している。

これまで、これほど多くの文字コードが存在してしまったのは、コンピュータの能力や独自路線を進むOS郡のたまものでしょうか。

投稿日時 - 2003-05-18 21:22:23

あなたにオススメの質問