[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 メーリングリストの案内