[Namazu-devel-ja 569] Re: Earl Hood 氏のパッチの問題について

Tadamasa Teranishi yw3t-trns @ asahi-net.or.jp
2005年 8月 31日 (水) 18:41:39 JST


寺西です。

NOKUBI Takatsugu wrote:
> 
>   Earl Hoodさんは以前からNamazuを使ってもらっていて、できるだけ良好な
> 関係を維持したいと思っています。それと、これまでMHonArcとNamazuを使っ
> ているISO-8859-*圏のユーザに対して、せめて利用できる状態を維持したいと
> も思っています。

気持ちはわかりますが、プログラムがそうなっていないんですもの。

> > 0x80 - 0xff までを通すのであれば、処理する文書すべてが ISO-8859-1
> > でないとダメです。(もっとも、それとて非日本語環境で日本語処理が
> > 通ってしまう場合があるので、安全ではないのですが...。)
> 
>   ということで、とりあえずja以外のときは通すようなパッチをまずは書いて
> みました。ja環境でなければ日本語のデータを入力されても正しく処理できな
> いので、そういう状況で8bit目が立っているデータはISO-8859-*だと仮定して
> 処理してしまってもいいと思います。

decode_numbered_entity に限った話だと、デコードされたコードは
ISO-10646 で、0x80-0xff に限れば ISO-8859-1 です。
# 意図的に変なコードを仕込まれていないならば...。

これは数値実体参照にエンコードされる際にコード変換されます。
 
>   個人的には過去との互換性をできるだけ維持したいので、たまたま
> ISO-8859-*が通っていた過去の状態も、できればそうありつづけたいと思って
> います。

実際問題、ISO-8859-* で使えるのは、ISO-8859-1 とそれ以外で事情が
異なります。

(MHonArc は使わない場合で)Namazu で ISO-8859-* のどれか1種類の文書のみ
を使用したとすると、たぶん、使えるでしょう。(非日本語環境で、日本語
処理が働いてしまう問題はあるかもしれませんが...。)

Namazu + 古い MHonArc で、ISO-8859-* のどれか1種類の文書のみを使用
した場合も、同様に使えるでしょう。

Namazu + 新しい MHonArc で、ISO-8859-* のすべての文書を使用し、
検索時に ISO-8859-1 で使うのなら、ISO-8859-1 の文字に収まるものは
使えるでしょう。ISO-8859-1 に含まれない文字の ISO-8859-* な文字は
削除されます。(ただし、MHonArc 以外の文書と混在はダメ)

てな、状況で ISO-8859-1 な環境でなら、少しは使えるでしょうが、
ISO-8859-1 以外の ISO-8859-* な環境だと、ボロボロなはずです。
少なくとも文字化けしまくりのはず。

ISO-8859-1 環境で ISO-8859-* な文書を新しい MHonArc で処理した場合に
限ればそれなりには使えるだろう。制限はあるけど。というのが実情で
しょう。
(まだ、きちんと使えるのは ISO-8859-1 の文書を ISO-8859-1 な環境で
使うことですが。)
 
>   ともかくとして、この問題は他の部分にもできるだけ影響をあたえないよう
> にして、自分が担当しようと思っています。コードには気を付けますので、そ
> ういうところで手を打っていただけませんでしょうか。

影響しないことはないでしょうけど。

ISO-8859-1 環境で ISO-8859-* な文書を新しい MHonArc で処理した場合に
限ってなら使えるが、他の文書と混在したり、古い MHonArc で処理した
インデックスに追記したりすると、ボロボロです。
ってな状況であることを理解していただき、これらのあらゆる
不具合/トラブルはそもそも解決できないよってことを認識した上で
お願いします。

で、
> 百歩譲って "Malformed UTF-8 ..." を消すことだけを考えると、
という処理なら以下で良いです。
255 以上は英語、日本語のどちらの環境でも削除してよいからです。
また、ISO-8859-1 しか関心のない Earl Hood 氏ならこれで満足でしょう。

sub decode_numbered_entity ($) {
    my ($num) = @_;
    return ""
        if ($num >= 0 && $num <= 31) || ($num >= 127 && $num <= 159) ||
           $num >= 255);
    return ""
        if $num >=127 && util::islang('ja');
    sprintf ("%c",$num);
}

まぁ、くれぐれも他のフィルタのdecode_numbered_entityまで
拡張しないでくださいね。
--
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns @ asahi-net.or.jp
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E




Namazu-devel-ja メーリングリストの案内