No. 570/622 Index Prev Next
Path: titcca!ccut!wnoc-tyo-news!scslwide!wsgw!wsserva!sakamoto
From: sakamoto@sm.sony.co.jp (Tomohiko Sakamoto)
Newsgroups: fj.kanji
Subject: Process Code of EUC (Re: Kanji code of OSF/1)
Message-ID: < 42990@wsserva.sm.sony.co.jp> 
Date: 7 Jun 90 18:08:00 GMT
References: < 3859@ntt-twins.ntt.jp> 
Sender: news@sm.sony.co.jp
Distribution: fj
Lines: 80

In article < 3859@ntt-twins.ntt.jp> ,
	nakayama@ntt-twins.ntt.JP (Nakayama Ryu~ji) says:
>  情報交換用コードは必ず designate/invoke がいると思っているので(だから、
>  普通の文章でたとえ始めにアルファベットが来ても、始めには ESC ( B とか
>  が来るべきだと思ってます)、今の議論はファイルコードのことだと思って話
>  をします。
>  
>  内部コードは 16 ビットフルに使ったやつがいいと思う。
>  	0b000000000xxxxxxx	ASCII/JIS ローマ字
>  	0b0xxxxxxx1xxxxxxx	JIS 漢字
>  	0b100000000xxxxxxx	JIS カタカナ
>  	0b1xxxxxxx1xxxxxxx	外字(は本当はイヤ)
>  てな感じのやつ。

用語の問題ですが、内部コード、外部コードというのは曖昧な呼び方です。

システムを考えてみると、
		内部コード=ファイルコード、外部コード=通信コード、
プログラムを考えてみると、
		内部コード=処理コード、外部コード=ファイルコード、
となります。

中山さんの内部コードは処理コード(プロセスコード)ですね。
これは、なかなかセンスのいい処理コードの決め方だと思います。
というのは、unsigned short で比較して

	ASCII <  JIS 漢字 <  JIS カタカナ <  外字

という順序が付けられるからです。EUC のコードセット番号の順にも対応してい
ます。G0 〜 G3 の順と言ってもいいでしょう。

ところが、AT& T が提唱している処理コードは次のようなものです。

 	CS0  00000000 0xxxxxxx  ASCII
 	CS1  1xxxxxxx 1xxxxxxx  JIS 漢字
 	CS2  00000000 1xxxxxxx  JIS カタカナ
 	CS3  1xxxxxxx 0xxxxxxx  外字

これだと、

	ASCII <  JIS カタカナ <  外字 <  JIS 漢字

になってしまうように見えます。
実はこれは嘘で、外字と漢字の順序づけがうまくいかないのです。
例えば、「あ」= 0xa4a2、「ン」= 0xa5f3。『ある外字』= 0xa521 というのを
考えてみましょう。

	「あ」 <   『ある外字』 <  「ン」

あるOSで、grep '[あ-ン]' とやったら平仮名と片仮名だけがマッチするだろ
うと思っていたら、変な文字が引っ掛かったという例を私は知っています。

処理コードを、次のように決めてくれたら、漢字と外字が混ざることがなかった
のに。

 	CS0  00 0000000 xxxxxxx  ASCII
 	CS1  11 xxxxxxx xxxxxxx  JIS 漢字
 	CS2  01 0000000 xxxxxxx  JIS カタカナ
 	CS3  10 xxxxxxx xxxxxxx  外字

AT& T も反省したのか、4バイトの処理コードでは、

 	CS0  0000 0000000 0000000 0000000 xxxxxxx  ASCII
 	CS1  0011 xxxxxxx xxxxxxx xxxxxxx xxxxxxx
 	CS2  0001 xxxxxxx xxxxxxx xxxxxxx xxxxxxx
 	CS3  0010 xxxxxxx xxxxxxx xxxxxxx xxxxxxx

となっているようです。

なぜ、 CS0 <  CS2 <  CS3 <  CS1 という順序にこだわるかというと、ファイルコ
ードの文字列を strcmp で比較するとこうなるからじゃないでしょうか。

	"\x21" <  "\x8e\xa1" <  "\x8f\xa1\xa1" <  "\xa1\xa1"

2バイトの処理コードと4バイトの処理コードがあることも EUC の問題点かも
知れません。

Next
Continue