No. 89/622 Index Prev Next
Path: titcca!nttlab!ouicsu!shpnar!ikoma
From: ikoma@shpnar.sharp.JUNET (Takao Ikoma)
Newsgroups: fj.kanji
Subject: is-shift-JIS or is-EUC ? (in Kanji)
Message-ID: < 602@shpnar.sharp.JUNET> 
Date: 12 May 87 10:21:14 GMT
Reply-To: ikoma@shpnar.sharp.JUNET (Takao Ikoma)
Distribution: fj
Organization: Computer Div., SHARP Corporation, Yamatokohriyama, Nara
Lines: 41


漢字コード変換のフィルタについての問題です。

JIS-to-ShiftJIS、および、ShiftJIS-to-JISのフィルタは各所で作られ、
利用されています。これらのフィルタは、(ちゃんとは調べていませんが、
おそらく)、たとえばJIS-to-ShiftJISならば、JISが来ようとShiftJISが
来ようとShiftJISを出すというように、どちらのコードが来ようとも
無条件に一方のコードに変換してくれるように作ってあると思います。

では、ShiftJISとEUCの間でも同じようなフィルタを作ることはできるの
でしょうか?JISとShiftJISならば、エスケープシーケンスが来ればJIS、
MSBが立っていたらShiftJISと単純に判定できますが、ご存じのとおり
ShiftJISとEUCは混在できず(区別できず)、EUC-to-ShifJISのフィルタに
ShiftJISのデータが入ってきたりすると、Shift-shift-JIS(?)になって
しまいます。

かといって、このようなフィルタを作ることはまったく不可能なのかと
いうとそうでもなく、極端な話をすると、入力データを仮名漢字変換用の
辞書でも引いて統計的な処理をすれば、どちらのデータが入ってきたかは
判定できるはずです。そこまでやらなくても、C1領域(0x8*、0x9*)のコー
ドがくればShiftJISと判定してたいていの場合大丈夫でしょう(制御文字の
使用に関する約束事が必要でしょうが、そのあたりEUCで決まっているの
でしょうか?詳しいかた、Follow-upお願いします)。

ただし、このような判定方法は完全なものではなく、入力データがある
程度の量ないと、セマンティクス抜きでは判定できません。たった2バ
イトのデータがどちらのコードなのかは、書いた本人に聞いてみないと
分かりません。

このようなフィルタを作るにはどうすればよいか、要は、入力データが
ShiftJISかEUCかを判定あるいは推定(100%確実な方法はないので)する
アルゴリズムとはどういうものなのか、できるだけスマートな(簡潔で
精度の高い)解、もしくは、ご意見を聞かせてください。

もしも私がハッカーだったら、こんなことをうだうだと書かずに現物を
fj.sourcesにポストするところですが、残念ながらそうではありません
ので、ここでは問題提起に留どめておきます。

Next
Continue < 811@etlcom.etl.JUNET>
< 958@flab.flab.fujitsu.JUNET>
< 659@rshvax.ascii.junet>