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