000000 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

パソコンとITの雑学ブログ アンクル・トム

日本語の文字コード

日本語の文字コード (1)

コンピュータで取り扱う文字のうち英数字は世界共通の仕様で基本的にどこの国のパソコンでも正しく表示されます。
ただし日本語については、日本語のWindowsで入力されたものはそのままでは日本語のWindowsでしか正しく表示されません。

例えばInternet Explorerで楽天のサイト”http://www.rakuten.co.jp/”を開いて、IEの画面で上のほうにある「表示」というメニューのタブを開き下のほうの「ソース」というメニューを選んでみてください。
メモ帳が開いて、中ほどに何だかわけのわからない文字がたくさん表示されたでしょう。
この現象をいわゆる「文字化け」と呼びます。

楽天のサイトを管理しているコンピュータはWindowsではないので日本語の扱い(文字コード)が違います。
世の中のコンピュータは台数的には圧倒的にWindowsパソコンが多いのですが、日本語についてはWindows同志でないと正しく扱われません。その意味ではWindowsは異端児なのです。

新春シリーズ第一弾は日本語とコンピュータについて書きましょう。


文字コードの世界


日本語の文字コード (2)

コンピュータの構造というのは、基本的に誕生以来変わっていません。
2進数の加減乗除ができる、本質的にそれだけです。
但しものすごく速く永遠に飽きずに繰り返すことができます。

それだけで文字や漢字を表現したり、画像や音声を処理したり、ネットーワークにアクセスしたりできるんだから人間は凄いものを発明したんだなぁと思います。

ということで、文字も2進数の組み合わせで表現する。
方法はいくつもありますが、皆が勝手なことをしていたらお互いにデータの交換ができない。
なのでルールを決めることになる。それが”標準化”というものです。
しかしそれでも世界統一はなかなか図れず、数種類の方法が残りました。

●英数字の文字コード体系:ASCII, EBCDIC

●日本語の文字コード体系:JIS, EUC, Shift-JIS

●世界共通の文字コード体系:Unicode(日本語も含まれる)

今もこれらの方式が世の中に混在しており、インターネットの環境ではその違いが互いに影響を及ぼします。
ただしInternet Explorerのようなブラウザは、これらの違いを吸収するようにできています。

Windowsで採用されているのは表向きはShift-JISです。
これはWindows以前のMS-DOSでShift-JISが採用された時代からの互換性を保っているためです。
実はWindows95からは内部的にはUnicodeが使われていたのですが。
最新のWindows VistaでもShift-JISを捨て切る事はできませんでした。

JISは汎用コンピュータ、EUCはUNIXやLinuxで採用されている日本語文字コード体系です。


日本語の文字コード (3)

以前に、漢字コード体系について書いたことがあったので改めて紹介しておきます。
次の話に進む前に参考情報としてご覧ください。
(実は同じような事を書こうとして、以前書いたことを思い出しました)

「コンピュータと漢字の話 (1)」
JIS漢字コードとShift-JISコードの生い立ちについて

「コンピュータと漢字の話 (2)」
JIS漢字コード体系の改訂経緯について

「コンピュータと漢字の話 (3)」
補助漢字とWindowsについて


日本語の文字コード (4)

文字コードとは、特定の2進数の組み合わせに対してどの文字を割り当てるかという表のことです。
最初の頃はこれを各メーカーが勝手に決めていたのでテキストデータの交換が行えませんでした。

1962年にアメリカでANSI(日本のJISにあたるアメリカの標準規格)の規格として誕生したのがASCIIコードです。日本のアスキーという会社名も、このASCIIに因んだ名前です。
ASCIIは、American national Standard Code for Information Interchange (情報交換用アメリカ標準コード)の略語です。

ASCIIコードでは2進数7ビットで1文字を表すように規定されました。
その組み合わせは128通り=128文字の表現が可能ということで英語は26文字、大文字・小文字を区別したとしても52文字ですから128文字あれば特殊記号などを入れても充分と当時の人々は考えたのです。
実際、その後1967年に国際規格としてISO R 646(内容はほぼASCIIと同じ)が制定された時も6ビット案と7ビット案があり最終的に7ビット案に落ち着いたということです。
今私たちが考えれば7ビットというのはおよそ中途半端だと思うのですが、以上のような状況でしたから8ビット案など浮かぶはずもなかったのです。

しかし日本では事情は異なりました。
日本にはカタカナが存在したからです。ISO R 646を受け日本でも1969年にJIS C 6220(現在のJIS X 0201)規格が制定されましたが、この時点で7ビットと8ビットの2種類の規格が決められました。
今で言う”半角カタカナ”の誕生です。
ローマ字でしか表現できないよりも、カタカナの表現ができた方が遥かに日本人には分かりやすかったのです。
以後、約10年間にわたりコンピュータが表現する日本語は半角カタカナでした。
そしてJIS X 0201は今でも立派に生きている規格です。

ASCII

さて、このASCIIもどきとも言える8ビットJIS X 0201の表を見ると80-9FおよびE0-FFの領域は何も文字が割り当てられていません。(厳密には制御コード領域なのですが今は忘れてください)
実はこのことがShift-JISの誕生に大きく寄与しました。


日本語の文字コード (5)

コンピュータ上で英数字を表現するための文字コードは、1文字が7ビットか8ビットで構成されています。
7ビットであれば128通りの組み合わせなので128種類の文字、8ビットであれば256種類の文字になります。

さて、それでは漢字を表すにはどうしたら良いのでしょうか?
普段よく使われている漢字だけでも数千種類、戸籍などに使われている字を含めると1万種類を超えます。
そこで、8ビットの倍の16ビットを使うことが考えられました。

16ビット=2の16乗=65,536種類 これで何とか足りそうですね。

全くの余談ですが電卓で2のべき乗を確認する方法
1. ”2”のキーを押して、次に”×”のキーを2回押す。これで1乗
2. ”=”のキーを15回押す。これで16乗
学生の頃は2の31乗まで覚えてました(2,147,483,648)乱数の発生を勉強してたので。
麻雀をやる人も点数計算するために結構覚えてますね。

閑話休題

こうして日本語(漢字)コードは英数字の倍、2バイトを使って表現することがJIS規格で定められました。
また一般的に2バイトを使うコードを全角、1バイトコードを半角と呼びますがこれはJIS B 0191で規定されている「日本語ワードプロセッサ用語」です。

さて、漢字コードは規定されたもののこのままでは”絵に描いた餅”です。
どうやってこれを実際のコンピュータシステムに実装するか、ここでまたいくつかのアプローチに分かれました。
というのも、このJIS漢字コードは具体的なコード番号で言うと”2121”~”7E7E”の範囲を使用します。
そして最初の1バイト目は従来の英数字のコードと同じなのです。
このままでは漢字なのか英数字なのか、文字列としてコードを並べた時に区別がつきません。

まったくJISを規定した人たちは何を考えていたのでしょうかね?
尤も、私もある審議会でお偉い先生に規格の技術的な矛盾点について質問したところ「実装を考えるのは学者の仕事ではなくメーカーの仕事だ」と言われ頭に来たことがあります。

次回は各社、各団体が編み出した実装方法について。


日本語の文字コード (6)

1978年、JISで制定された漢字コードを実際にコンピュータ上でどう処理するか、具体的には漢字テキストデータの処理方法ですが大きくは以下の4通りの方法があります。

■漢字イン・漢字アウト方式(JIS)
2つの制御文字の間に漢字テキストを挟みこむ方式です。
つまり
  <ここから漢字が始まる> 漢字テキスト <これで漢字が終わる>
単純ですがおよそ芸がない。
しかし、この方式が実際に最も多く採用されています。
過去オフコンや汎用コンピュータの多くがこの方式でした。

■最高ビット反転方式(旧EUC/JEF)
8ビットJIS X0201の256文字ある英数字コードテーブルのうち、後半の128文字分は英数文字で使用せず漢字コードを表現するために使用するという方式です。
具体的には80-FFの範囲もいコードの最高位のビット(MSB)を反転させて表現する。
(例えば3021(亜)はB0A1と表す)
この方式は、見てすぐに漢字コードであることが識別できる反面、半角カタカナは表現できなくなります。
最初の版のEUC(UNIX系)やJEF(富士通)で採用されました。

■多バイト方式(Unicode/新EUC)
最初に制御コードで宣言するのは漢字イン・漢字アウト方式と似ていますがその後に続くコードは必ずしも2バイトではなく3バイトや4バイトもあるという方式です。
2バイトだと65,536種類の文字しか扱えませんが多バイトであれば理論上無限になります。
全世界の文字を表す(Unicode)には2バイトでは所詮足りないことから考えられた方式です。

■シフト方式(Shift-JIS/NECコード)
8ビットJIS X 0201の256文字ある英数字コードテーブルのうち、使われていない領域を漢字コードの1バイト目に利用する方式です。
具体的には2121から始まる漢字コードを→8140のようにテーブルの場所を移動(シフト)させる。
他の方式に比べ2バイトでメモリが節約できるメリットもあり、パソコン用のOSであるCP/M-86やMS-DOSで採用されました。


日本語の文字コード (7)

この話題は延々と長くなってしまって、本来書こうと思ったことが7回目にしてやっと順番が巡ってきました。

それはShift-JISの光と影について。
私が某外資系コンピュータメーカーに入社したのは1979年、奇しくも富士通が日本語処理の最初の実装体系JEFを発表した年です。
その4年後、私は営業推進部門でパソコンの製品企画担当になりました。
当時のパソコンのOSはCP/M-86で日本語表示もサポート。漢字コードはShift-JISです。
MS-DOSはまだV1.25で日本語非対応、V2.11で対応されたのはその翌年でした。
だからMicrosftがShift-JISを開発したという俗説は明らかに間違いです。

当時のパソコンはメモリが小さいし、プログラム空間(一つの実行プログラムの最大サイズが64KB)も小さいので漢字イン・アウト方式ではメモリを浪費し非効率。
その点ではShift-JISは画期的で、全角と半角の比がデータも画面も1:2でわかり易い。
しかし当時から、メインフレームやUNIX派には評判が悪かったのです。
理由は、ソフトを開発する側から見ると欠点があったこと。

Shift-JISでは第2バイト目に、ACSCII文字の”5C”や”7C”というコードが出現することがあり、特に”5C”は為替記号またはバックスラッシュと呼ばれCコンパイラを始め多くの開発ツールで制御文字として使われていたのです。
それと、理論的に利用できる文字数が11,000文字強しかないので、将来的に計画された文字コードの拡張に対応できない、なども「使えない」と酷評された理由でした。

しかし実際に現在JIS X0213:2004(JIS第三水準・第四水準を含め)を実装しているOSはおそらくWindows Vistaだけです。
つまりは皆で寄ってたかって文句をつけておいて、結局自分達は何もしないという典型的な日本のいじめ文化だなぁ~と思います。
かつて「通産省ファミリー」と言われた国産メーカーが母国語処理についてシアトルの会社より遅れているとは何とも皮肉。

いずれにしても、X0213:2004対応によりShift-JISの使用文字数はもう11,000を超えました。
次はいよいよShift-JISを捨てUnicodeに移行するしかないと思いますね。


(おまけ)異なる文字コードのテキストを表示 フリーソフト ttPage

Windowsパソコンは日本語の文字コードをShift-JISで表していますので、EUCやJISで表された(エンコードされた、と表現します)テキストを表示しようとするとグチャグチャに文字化けしてしまいます。
そんな時、正しくテキストを表示してくれるフリーソフトが「ttPage」です。
レンタルサーバやブログサーバを使っていると、それがLinuxだったりして自分のホームページやブログをソース表示すると日本語の部分が読めなかったりすると思います。
ttPageがあればコピーして貼り付けるだけで簡単に確認できます。


Copyright (c) 1997-2019 Rakuten, Inc. All Rights Reserved.