須藤です。

From: "NAKAMURA, Hiroshi" <nakahiro / sarion.co.jp>
Subject: [ruby-list:35115] Re: ANNOUNCE: REXML のドキュメントの和訳を公開しました。
Date: Tue, 14 May 2002 17:31:14 +0900
Message-ID: <004f01c1fb21$58e0e1f0$85222fc0 / sarion.co.jp>

> もし須藤さんがご存知ならお聞きしようと思って出てきたんですが、
> REXML/2.3.*系のストリーミングAPIって使われました?
すいません、使っていません。(^^;

> という違いです。# MT考えると面倒だけどさー > $KCODE
勉強不足です。MTって何ですか?

> REXMLの2.1.*をさらっと眺めた経験からすると、UTF8
> (もしくは先頭から固定長を取り出してUTF8に確実に変換できるCES)
> でない場合、ストリーミングAPIは実際ストリーミングに
> できない気がします。2.3.*だとストリーミングAPIを変えた
> とかいうことらしいので、もしかしたら変わってるかも。。。
> と思ってお聞きしてみました。
なひさんの言うストリーミングAPIとは、REXMLのparse_stream()とか、SAXみ
たいに(SAX?)イベント毎に処理を行うAPIの事ですよね?外してたらすいません。

2.3.*で変わったことと言えばSAX2のサポートです。
ソースを見てみましたが、従来のAPIに一枚皮を被せた感じ(内部で従来の
parse_stream()を呼んでいます)で実装されているので、御指摘の問題は解決
されていないと思います。たぶん。。。

なひさんは、REXMLでも$KCODEが(EUCかSJISに)指定されていれば、その設定を
使い、それ以外の場合はUTF8を使うように実装されれば使いやすいと言うこと
ですよね。こんな感じで

rexml/document.rb line 164,165より
source.match( /^\s*/um, true )
word = source.match( /^\s*(<.*?)>/um )
              ↓
if $KCODE == "NONE"
  code = "UTF8"
else
  code = $KCODE
end
source.match( Regexp.new("^\\s*",Regexp::MULTILINE,code), true )
word = source.match( Regexp.new("^\\s*(<.*?)>",Regexp::MULTILINE,code), true )

違いました?

> 不明なら無視してください。いつか自分で眺めてみます。^^;
分からなかったですけど、少し自分で調べてみました。

<><><><><><><><><><><><>
       須藤 功平
     kou / cneti.net
<><><><><><><><><><><><>