From: "NARUSE, Yui" Date: 2010-11-03T17:49:16+09:00 Subject: [ruby-dev:42519] Re: [Ruby 1.9-Bug#3990][Closed] tests of rexml/rss reports many errors and failures without iconv 成瀬です。 (2010/11/03 8:24), Kouhei Sutou wrote: > 現時点でどうなっているのかを確認させてください。それによって > 進める順番が変わってくると思っています。 > > 以下のように認識していますがあっていますか? > > 1. 成瀬さんは「XMLDecl#enocdingなどは文字列にすべき」と主 > 張している。 はい。 > 2. 1.の理由はXML宣言用のencodingとtranscode用のencodingは > 異なるから。(XML宣言はShift_JISでtranscode用はCP932と > か) はい。 > 3. 当初の1.の理由は2.ではなくREXMLのAPIの互換性を失わせる > べきではない、だったが、今はその理由はなくなり、2.だけ > になっている。 ここは他の人にもわかりにくいと指摘されたのですが 当初から 2. と API 互換性の両方が理由です。 なぜ互換性を挙げたかというと、XMLDecl#encoding を、 XML 宣言用と transcode 用のどちらの意味にするかを考える際、 互換性的には XML 宣言用だと理解するべきだからです。 # transcode 用では指定自体を CP932 とかに変えないといけない # というか iconv の時でも Shift_JIS を使うと波ダッシュとかではまる わたしの視点も説明した方がよい気がするのですると、 a. 以前から REXML の変換周りは前述の理由から地雷があった b. 今回 iconv から transcode へ変換エンジンが変わった c. 併せて XMLDecl#encoding 等の戻り値が変わった→非互換 で、b. には賛成です a. は問題だとは思っていますが、かといって綺麗な解決策があるわけでも ないので、強い意見は持っていません。 (変換で使うエンコーディングを渡せるといいかなぁ、くらい) c. は非互換という明快な欠点がある一方、今回その欠点を打ち消すほどのメリットが あるとは思っていません。 String#encode のエンコーディング指定のための引数には String も渡せますし、 渡す直前に Shift-JIS (ハイフンのやつ) のようなものでも、 string.encode(REXML.find_encoding("Shift-JIS")) などとかませるとか、 方法は あるだろうので。 -- NARUSE, Yui