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>