No. 184/622 Index Prev Next
Path: titcca!srava!kameyama
From: kameyama@srava.sra.JUNET (Toyohisa Kameyama)
Newsgroups: fj.kanji
Subject: Re: rot13/47 nkf test
Message-ID: < 931@srava.sra.JUNET> 
Date: 17 Sep 87 09:48:14 GMT
References: < 1502@flab.flab.fujitsu.JUNET> 
Reply-To: kameyama@srava.UUCP (Toyohisa Kameyama)
Distribution: fj
Organization: Software Research Associates, Inc., Japan
Lines: 34

In article < 1502@flab.flab.fujitsu.JUNET>  ichikawa@flab.flab.fujitsu.JUNET (I.Ichikawa) writes:
>  nkf を、ROT13/47対応にしているのですが、どうも変なのです。
>  EUCに向って、ROT13/47を連続して行うと、
>  2)二回目、ROT13は常にうまくいくのだが、ROT47が元に戻らなかったり、
>  とんでもないコードになったり、シフトJISだとかんちがいすることがある。
>  ううむ、おかしい。

恐らくこういうことだと思います.
仮定:
	EUC とシフト JIS コードを判別するとき, シフト JIS の 1 バイト目のコード
	かどうかで判別している.
	(nkf のソース・コードを見ていないので確かなことは言えません.)
	この判別法は第 1 水準の文字ならばうまく判別できるのですが,
	第 2 水準の漢字の途中 (第 1 バイトが e0 を越えるところ)
	からはすべてシフト JIS 扱いになります.

rot47 はバイトごとに
	!(0x21) から O(0x4f) は P(0x50) から ~(0x7e) に,
	P(0x50) から ~(0x7e) は !(0x21) から ~(0x4f) に
変換されます.
EUC は, 第 1 バイトが 0xb1 から 0xcf までのコードをもつ文字, 即ち.
	院 (0xb1a1) から  弌 (0xcffe) までの文字
が判別不可能なコードに変換されてしまいます.
(シフト JIS でも同じような場所が変換不可能な文字に変換されるだろうと
思います.)
もし, 仮定が正しいとすると, これらの文字はすべてシフト JIS であると
みなされます.

以上が EUC の ROT47 に変換された文字の処理がうまくいかない理由だと推定します.
これを解決するのはかなりむずかしそうな気がします. (原理的に可能なのかな?)
Next
Continue < 1803@nirvana.cs.titech.JUNET>