■日本語の表現■

↑

1バイト系と2バイト系

コンピュータは英語圏で生まれた機械なので、文字列が処理できるようになっても当初は英語の文字しか扱えなかった。しかし日本ではやはり日本語が処理できないとまずいため、日本語のコードが定められることになる。

さて英語では文字はアルファベットが大小26文字×2+数字10個とあとは特殊文字だけなので、ASCIIは7bit(128個)もあれば十分足りていた。ただし7bitというのはコンピュータの処理単位としては中途半端なので8bitで処理するようになっていた。しかし8bitでは256文字しか使えない。これでは日本語の文字は全然足りない。

そこで日本語は1文字を表すのに2バイト(16bit)使うことになった。

そこで一般にASCIIで定められた8bit系の文字を1バイト系、JIS (Japan Industrial Standard,最初の規格は1978年) で定められた16bit系の文字を2バイト系という。

これを半角・全角という人もある。初期の段階のコンピュータのプリンタやディスプレイでは、英文字を表すのに横に8ドット使用し、日本語の文字を表すのに横に16ドット使用していた。つまり2バイト取る文字が画面やプリタン上でも英文字の倍の横幅を取っていたので、日本語を標準として全角と呼び、英文字は半分しか取らないので半角と呼んだのである。

ただし、半角という言葉は場合によっては誤解を招くこともある。本来JISでは空欄になっている29〜2Bの列に、多くの国内メーカーではデータとしては2バイトであるが印刷上の文字幅は通常の文字の半分の、まさに半角文字を定義しているのである。

このため、半角という言葉は、1バイト系を意味するのか、それとも上記2バイト系ではあるが表現上半分の幅を持つ文字を言うのかがあいまいであり、できれば使用しない方がよい。

データの共存

さて、JIS(正確には1978年規格/1983年規格)の2バイト系コードは 2121〜7E7E の領域に漢字を定義している。(ただし空欄がたくさんある)

このため、このデータをそのまま使用すると、1バイト系の文字と区別がつかない。JISコードを作った人はいったい何を考えていたのであろうか。

そこでこのままでは使い物にならないので、両者を同時に使えるようにする工夫がいろいろ行われる。その中でも代表的なものは、下記の4種類である。

以下、そのひとつひとつを見ていこう。

漢字イン・漢字アウト方式

最も原始的で使いにくいが悲しいことにたくさん使われているのがこの方式である。一般にはJISコードと呼ばれている。

これは日本語が始まる前に漢字インコードを付け、それからJISコードで記述された日本語を書いて、終わったら漢字アウトコードを付けるというものである。

漢字イン/アウトが実際にどういうコードを使うかは実は処理系によって異なる。下記にその例をあげる。

Device 漢字イン漢字アウト
プリンタ 1C,26 1C,2E
電子メール1B,24,421B,28,4A

最高ビット反転方式

UNIXの標準コードであるEUC (Extended Unix Code)の最初のバージョンや、富士通の漢字コードとして名高いJEFがこの方式である。

要するに1バイト系の文字の主要部分は前半の 00〜7F までであり、80〜FF の部分はその後拡張された部分である意味無視してよいものとして、この部分を日本語に使用する。つまり、たとえば 3021 (亜) という日本語コードを B0A1 というように、最高位ビット(MSB)を反転させて使用するのである。

これによって、日本語と英語が混じっても問題なく処理できることになる。

なお、この流れでは、2バイトともビット反転させて B0A1 のようにする方式と、1バイト目のみ反転させて B021 のようにする方式とがある。EUCもJEFも両バイト反転方式である。

この方式の利点は、ぱっとその部分だけ見た時、そこが日本語コードなのか英語コードなのかが一目で分かるということである。

逆に欠点は1バイトのカタカナが使用できないことである。ただしEUCの新しいバージョン(悲しいことに対応しているシステムはまだ少数である。むろんLinuxはOK)やDECコードなどでは、これに更にシフトコードを使って事実上1バイトのカタカナも使えるようにしている。その件については、多バイト方式の項参照のこと。

多バイト方式

この項は長くなったので、別文書に分けました。こちらを参照して下さい。

シフト方式(NEC方式)

2バイト系の文字と1バイト系の文字を美しく共存させるためには、このシフト方式を取るしかない。

NECのオフコンや大型機などで使用されたコードは、漢字コードの先頭1バイトが 21〜7E の 94種類しかないことに注目して、6,7,8,9,E,F の列を使用し、21→60, 22→61, ...., 7E→FF と変換して記録するものである(ただし 7D と 7F は飛ばす)。

この結果、例えば 2121 は 6021 と記録されることになる。(実際はこの手のマシンはEBCDIC系なのでファイル上は 794F になる。)

なかなかいい方式なのだがオフコン系の処理だけ考えて作られているため、1バイトのカタカナ(A〜D列)とは共存できるが、なんとアルファベットの小文字(6〜7列)と共存できない。

シフト方式(Microsoft方式)

悪名高き『シフトJIS』である。すこぶる評判が悪く、これを誉める人にまだ会ったことがないのだが、私はたいへん優秀なコードだと思う。記憶があやふやだが、確かアスキーの西和彦がMicrosoftの副社長だったころに、両社で共同製作されたものではなかったかと思う。

そのため、基本的に日本語版MS-DOSがこのコード体系を使い、続いてアップルのMacintoshもこの体系を採用したため、事実上のパソコン界の標準コード体系になった。

NECコードは1バイト目だけをシフトさせたのだが、シフトJISの場合は2バイトともシフトさせる。この結果、2121〜227E → 8140〜81FC のように、2列単位で変換が行われるので、変換ルーチンはNECコードのものより少し複雑になる。(7Fは飛ばす)

こうすると使用するのは3列(8,9,E列)のみで済み、2121〜7E7E が 8140〜EFFC におさまるため、1バイトのカタカナ(A〜D列)とも、アルファベット小文字(6〜7列)とも共存できる。これは日本語を表現するコードとしてはやはり最高のコードであると思う。

なお、NECコードにしてもシフトJISにしても 7F の使用を避けているのは、一般にこのコードが伝統的に High-value と呼ばれ、データの終了を表すコードとして使用されてきたためである。

8ビット時代に入って High-value としては FF を使うケースも出てきた。シフトJISはこのコードにもぶつからない。NECコードは理論上はぶつかるが、実際には 7E21〜7E7Eには漢字は定義されていないため、現実的にはぶつかることはない。

各社の独自拡張

さて、これが困ったものである。実は78年JISのコードはその領域をASCIIとぶつけたというだけでなく、ずいぶんと基本的なコードが不足していた。そのため、各メーカーは独自にコードの拡張を行い、この部分に関しては全く互換性がない。

しかしさすがに大勢力になったシステムはある程度の流通性がある。中でも3大勢力はNECの拡張コード、マッキントッシュの拡張コード、IBM拡張コードである。ただし例によってこれらには互換性がないので、丸付きの数字やローマ数字などを使用すると、どう相手に見えるかは分からない。基本的にはJISにない文字は使用しないのに越したことはない。プリンタなどは設定により、どれも使えるようにしている。

なお独自拡張の中で面白いのは任天堂の1バイト系ひらがなである。

1バイト系にひらがなを定めた処理系はこの任天堂のほかは、以前1度かなりマイナーなマシンで見た記憶があるだけである。

Windows拡張漢字

Windows95では、通常の文字セットのほかに拡張漢字として次のような漢字が利用できます。これはその他の環境では見えませんので、使わずに済むのであれば使わない方がよいでしょう。一応SMAPの草なぎ君の「なぎ」の字「g」などもあるのですが。

(あ゛。。。。この表自体が見えないかな、ひょっとして ^^;;;) JIS sJIS 区点 0 1 2 3 4 5 6 7 8 9 A B C D E F 7920 ed3f 8900   \ ] ^ _ ` a b c d e f g h i j 7930 ed4f 8916 k l m n o p q r s t u v w x y z 7940 ed5f 8932 { | } ~ 7950 ed6f 8948 7960 ed80 8964 。 「 」 、 ・ ヲ ァ ィ ゥ ェ ォ 7970 ed90 8980 ャ ュ ョ ッ ー ア イ ウ エ オ カ キ ク ケ コ  

7a20 ed9e 9000   サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ 7a30 edae 9016 ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル 7a40 edbe 9032 レ ロ ワ ン ゙ ゚ 7a50 edce 9048 7a60 edde 9064 @ A B C D E F G H I J K L 7a70 edee 9080 M N O P Q R S T U V W X Y Z [  

7b20 ee3f 9100   \ ] ^ _ ` a b c d e f g h i j 7b30 ee4f 9116 k l m n o p q r s t u v w x y z 7b40 ee5f 9132 { | } ~ 7b50 ee6f 9148 7b60 ee80 9164 。 「 」 、 ・ ヲ ァ ィ ゥ ェ ォ 7b70 ee90 9180 ャ ュ ョ ッ ー ア イ ウ エ オ カ キ ク ケ コ  

7c20 ee9e 9200   サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ 7c30 eeae 9216 ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル 7c40 eebe 9232 レ ロ ワ ン ゙ ゚ 7c50 eece 9248 7c60 eede 9264 @ A B C D E F G H I J K ・ 7c70 eeee 9280 ・ @ A B C D E F G H I ¬ U V W  

9320 fa3f 11500   @ A B C D E F G H I T U V W X 9330 fa4f 11516 Y Z [ \ ] ¬ U V W ∵ \ ] ^ 9340 fa5f 11532 _ ` a b c d e f g h i j k l m n 9350 fa6f 11548 o p q r s t u v w x y z { | } ~ 9360 fa80 11564 9370 fa90 11580  

9420 fa9e 11600   。 「 」 、 ・ ヲ ァ ィ ゥ ェ ォ ャ ュ 9430 faae 11616 ョ ッ ー ア イ ウ エ オ カ キ ク ケ コ サ シ ス 9440 fabe 11632 セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ 9450 face 11648 ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン 9460 fade 11664 ゙ ゚ 9470 faee 11680  

9520 fb3f 11700   @ A B C D E F G H I J K L M N 9530 fb4f 11716 O P Q R S T U V W X Y Z [ \ ] ^ 9540 fb5f 11732 _ ` a b c d e f g h i j k l m n 9550 fb6f 11748 o p q r s t u v w x y z { | } ~ 9560 fb80 11764 9570 fb90 11780  

9620 fb9e 11800   。 「 」 、 ・ ヲ ァ ィ ゥ ェ ォ ャ ュ 9630 fbae 11816 ョ ッ ー ア イ ウ エ オ カ キ ク ケ コ サ シ ス 9640 fbbe 11832 セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ 9650 fbce 11848 ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン 9660 fbde 11864 ゙ ゚ 9670 fbee 11880  

9720 fc3f 11900   @ A B C D E F G H I J K

新JISコード

これもまた困ったものである。最初にJISの漢字コードが定められたのは1978年の C6226-1978 なのだが、これが 1983年に改訂されて新しいJISコード C6226-1983 (X0208-1983) が発表された。しかもこの時一部の文字を入れ替えてしまった!!

この1978年規格を通称旧JIS、1983年規格を通称新JISと呼んでいる。

なぜいったん決めたコードを変更するのか、私には理解しがたい。基本的に新規格というのは追加で行くべきである。この結果たとえば「檜」と「桧」はマシンによって逆に見える。また「邇邇芸命」などというのもマシンによっては「迩迩芸命」に見えるのである。

NECのPC98(nx以前)は旧JISコード、DOS/Vは新JISコードを使用している。ただしPC98(nx以前)でもWindows95配下では、どちらも使用できるようになっている。

【新JISと旧JISで字体の違う字】

次の文字は旧JIS(1978年規格)と新JIS(1983年規格)で字体が交換になっています。(下記の表をPC98(nx以前)のMSDOSで見ると文字が逆転します) 3033鯵−鰺724d 395c砿−礦6268 4676迩−邇6d6e 3229鴬−鶯7274 3c49蕊−蘂6922 4768蝿−蠅6a24 3342蛎−蠣695a 3f59靭−靱7057 4930桧−檜5b58 3349撹−攪5978 4128賎−賤6c4d 4b79侭−儘5056 3376竃−竈635e 445b壷−壺5464 4c79薮−藪692e 3443潅−灌5e75 4557砺−礪626a 4f36篭−籠6446 3452諌−諫6b5d 456e梼−檮5b6d 375b頚−頸7074 4573涛−濤5e39 この他、新JISでは 7421-7424 の4文字が追加され、それに合わせて 3646尭−7421, 4b6a槙−7422, 4d5a遥−7423, 6076瑶−7424 の4書体が変更になっています。

またそれ以外で116文字の書体が変更されています。

unicode(旧規格)

unicodeというのは、世界中の全ての文字をきちんとコードづけようという理想によって制定されたコードである。そこでunicodeにより、英語やヨーロッパ圏の言語のみならず、ヘブライ文字やヒンズー文字、アラビア文字など全ての文字が体系づけられる。この場合、英語の文字なども2バイトで表されるので、全ての文字が2バイトで表現されることになって、テキスト操作がひじょうに楽になる。

しかしここに問題があった。

漢字のコードを付ける際に、漢字の本場は中国だからということで、中国主導で漢字コード体系が決められてしまったのである。しかしそれでは日本語を表現するのに足りない文字が多数出てくる。そのため日本が猛反撃をして、結果的に日本語のunicodeは中国語のunicodeとは別に決められることになった。ここに全世界統一のコードを作るという理想は破れてしまったのである。

unicodeを使用したOSとして有名なのは Windows-NT である。しかし実をいえば全ての日本語/中国語の文書をコンピュータで処理するためにはほんとうは2バイト(max65536文字)ではとても文字数が足りない。

そこで、unicodeの新しい規格ではとうとう4バイトで文字を表すことになった。

この時、従来との互換を取るため、従来のunicodeの文字はそのまま2バイトで使用される。そのため、unicodeは2バイト文字と4バイト文字が混在することになり、また「文字数」とは何かということで悩まなければならなくなったのである。

4バイトunicodeについては多バイト方式の項参照のこと。



(C)copyright ffortune.net 1995-2016 produced by ffortune and Lumi.
お問い合わせはこちらから