No. 413/622 Index Prev Next
Path: titcca!sragwa!wsgw!sak1!sakamoto
From: sakamoto@ws.sony.junet (Tomohiko Sakamoto)
Newsgroups: fj.kanji
Subject: Re: JIS X 0202
Message-ID: < 21105@wsgw.ws.sony.junet> 
Date: 13 Apr 89 08:21:49 GMT
References: < 570@crimson.kek.junet> 
Sender: news@ws.sony.junet
Distribution: fj
Lines: 130

In article < 570@crimson.kek.junet> ,
	keibun@onlnews.kek.JUNET (Hirofumi Fujii) says:
>   
>  EUCがJIS X 0202準拠かどうかというお話でした。まずハッ
	........

>  びその拡張法に従えば良いだけの話で、内部コードがJIS X 0202
>  に従っていないからと言ってブチブチいうのは「少し」筋違いだと思います。
>   
>  「少し」といって「全く」と言わなかったのは、上の議論はあくまでも建
>  前の議論であって、実際には大部分の計算機は通信回線に内部コードを
>  そのまま流し込んでくるのが現状ですから、その意味ではJIS X
>  0202に従うべしという主張もできると思うからです。

はい、ここまでは私も同意できます。でも、ここからあとは「ハズレ」ですね。

説明が長くなりますので、EUC に興味のない方は次に行ってください。

In article < 570@crimson.kek.junet> ,
	keibun@onlnews.kek.JUNET (Hirofumi Fujii) says:
> 
>  上に述べたようにEUCは内部コードとして使われるものですから、シス
>  テムにとって都合がよくなければなりません。今の話は特にテキストファ
>  イルに関連する話ですので、テキスト関連のツール、特にエディタにとっ
>  て都合よくできている必要があります。エディタにとってJIS7やシフ
>  トJISは大変扱いにくいものです。その理由は逆向きに戻る時に、現在
>  位置の1バイトを見ただけでは1バイト戻るのか2バイト戻るのか判定で
>  きないということです。必ず先読み(今の場合戻るのだから後ろ読みとい
>  うべきかな?)しなければなりません。EUCでも半角カタカナを正直に
>  G0だから8ビット目を立てないことにすると、もう1バイト戻ってみな
>  いとローマ字との区別ができません。もし半角カタカナの8ビット目を立
>  ててあれば8ビット目が立っていれば必ずその1つ前とセットで扱えばよ
>  いことになります。もしその1つ前がやはり8ビット目が立っていれば漢
>  字ですし、SS2であれば半角カタカナです。このおかげで、「1文字」
>  分ファイルポインターを戻すのが非常に楽になります。
>   
>  私はキットこれが理由だと思っています。EUCに詳しい人のフォローを
>  お願いします。

まず、EUC(Extended UNIX Code) は

	コード・セット0  0xxxxxxx
	コード・セット1  1xxxxxxx
	                  1xxxxxxx 1xxxxxxx
	                  1xxxxxxx 1xxxxxxx 1xxxxxxx
	                               :
	コード・セット2     SS2   1xxxxxxx
	                     SS2   1xxxxxxx 1xxxxxxx
	                     SS2   1xxxxxxx 1xxxxxxx 1xxxxxxx
	                               :
	コード・セット3     SS3   1xxxxxxx
	                     SS3   1xxxxxxx 1xxxxxxx
	                     SS3   1xxxxxxx 1xxxxxxx 1xxxxxxx
	                               :
					(SS2=10001110, SS3=10001111)

が基本です。そして各国語に対応しているということです。

日本語では、JAE(Japanese Application Environment) で

	コード・セット0  0xxxxxxx               (ASCII)
	コード・セット1  1xxxxxxx 1xxxxxxx      (JIS X 0208 漢字)
	コード・セット2     SS2   1xxxxxxx      (JIS X 0201 カタカナ)
	コード・セット3     SS3   1xxxxxxx 1xxxxxxx    (外字)

と規定されています。おそらくヨーロッパでは

	コード・セット0  0xxxxxxx    (ASCII)
	コード・セット1  1xxxxxxx    (ISO 8859)
	コード・セット2  使用しない
	コード・セット3  使用しない

となるのでしょう。この使い方は ISO 4873 の Level 1 に準拠しています。


さて、話を日本語に限って、「藤井さんのエディタ」を考えてみます。

「1文字戻るために1バイト戻って、そこの b8 が1でも2バイト戻ればいい」
とは断定できません。外字があるからです。もう1バイト戻って SS3 かどうか
を見ないといけないのです。


次に、JAE2.0 では、プログラム中での EUC の内部表現として、「処理コード」
というものを規定しています。

	コード・セット0  00000000 0xxxxxxx      (ASCII)
	コード・セット1  1xxxxxxx 1xxxxxxx      (JIS X 0208 漢字)
	コード・セット2  00000000 1xxxxxxx      (JIS X 0201 カタカナ)
	コード・セット3  1xxxxxxx 0xxxxxxx      (外字)

エディタなどの文字処理プログラムは、ファイルの入出力時に変換を行なうこと
によって、すべてを wchar_t という型の固定ビット長形式で扱うので、1文字
戻るのは簡単なわけです。ファイル・コードで SS2 のあとに b8 が0のバイト
が来ても問題ないのです。

コード・セット1〜3の各バイトの b8 を1にした本当の理由は、「ASCII文字
と容易に区別できること。特に、ASCIIのデリミタ文字と衝突しないこと」です。

これによって、既存のプログラムで改造を必要としないものが多くあるからです。

例えば、JISカタカナの '「' は b8 を0にすると 0x22 ですから、ASCIIの '" '
と同じになって、Cコンパイラなどで文字列定数として使用できなくなります。
使用できるようにするには、コンパイラの改造が必要です。

また、JISカタカナの 'ワ' は b8 を0にすると 0x5c ですから、ASCIIの '\'と
同じになって、Cプリプロセッサで

	#define AISATSU  コンニチワ

が、次の行への継続とみなされてしまいます。

'ワ’がコンパイラの文字列定数の中でも悪さをするのは言うまでもありません。


【参考文献】
	1. UNIX System V  日本語アプリケーション・エンバイロメント リリ
	   ース2.0 機能説明書(この本は誤植やおかしな点が多い。タイトルも
	   「エンバイロンメント」にして欲しかった)
	               ~~
	2. 情報処理 Vol.27 No.12 pp1393-1400 「UNIXの日本語化の実現方法」
		(和田先生のご指導に感謝いたします)

	3. JIS X 0201, JIS X 0202, JIS X 0208
		(JISハンドブック[50] 情報処理 ソフトウェア編 1988)

	4. ISO 2022, ISO 4873, ISO 8859

Next
Continue