From: "NARUSE, Yui" Date: 2010-11-18T23:43:14+09:00 Subject: [ruby-dev:42593] Re: [Ruby 1.9-Bug#3990][Closed] tests of rexml/rss reports many errors and failures without iconv 成瀬です。 (2010/11/18 22:46), Kouhei Sutou wrote: > In<4CDE5913.7060709@airemix.jp> > "[ruby-dev:42572] Re: [Ruby 1.9-Bug#3990][Closed] tests of rexml/rss reports many errors and failures without iconv" on Sat, 13 Nov 2010 18:23:36 +0900, > "NARUSE, Yui" wrote: > >> パッチを作ってみました。 >> https://github.com/nurse/ruby/compare/trunk...rexml > > ありがとうございます。 > REXML::EncodingクラスとかREXML::XMLEncodingクラスとかを作ろ > うかと思っていたのですが、文字列でもいいような気もしてきまし > た。(XML宣言のエンコーディングを比較しているところが分散し > ていていろんなところでupcaseがでてくるのが嫌だった。) > 実際にコードを書き出したらまた考えが変わるかもしれません > が。。。 比較対象は全て UTF-8 なので、REXML::Encoding モジュールに decode 済み or UTF-8 か否か、を示すインスタンス変数を追加というのは考えました。 >> 83a66d67 が encoding を String に戻すもののうち、主要なもの。 >> 8d20327b が 83a66d67 に含まれるべき変更のうち、主要でないものを、 >> わかりやすさのため今回別にしています >> 2de823bd が warning 消し >> 14187b46 が transcode 用の文字コード指定を追加するコードです。 > > えーっと、warning消しとかは混ぜないで欲しかったです。 git では別のコミットにしてあるので、「Showing 4 commits by 1 author.」 の下に出ている4つのコミットのリンクを選択すれば、例えば https://github.com/nurse/ruby/commit/83a66d679a788022bdcc7ecf0f7414437d8d175c などと個別の差分を見れますよ。 また、warningだけ別にした plain な diff も出せますが−、いらないかな > あと、warningを消そうとするのはよいと思うのですが、消すこと > が目的な変更はよくないと思っています。ダメなところに気づきに > くくなるので。 > 直すならちゃんとしたコードに直した方がよいと思っています。 > 例えば、こういうのにはちゃんとassertをつけた方がよいと思って > います。 > > def test_oses_with_bad_EOLs > - d = Document.new("\n\n\n\n\n\n\n\n") > + Document.new("\n\n\n\n\n\n\n\n") > end > > ということで、エッセンスだけ参考にして書き直しておきますね。 確かに。 ここはよろしくです。 > あ、そういえば、decodeのところで必ずBOMをチェックするように > していますが、これは必要なんでしょうか?BOMはファイルの先頭 > でだけチェックすればいいのだと思っていました。 む、確かにご指摘の通り誤っていますね。 >> これによって例えば以下のような違いが出ます。 > > これは何による違いですか? > >> 14187b46 が transcode 用の文字コード指定を追加するコードです。 > > の話でしょうか? おっと、また説明が不足していますね、そうです。 >> REXML::Document#write でも transcode encoding を指定できた方がいいかなぁ >> とも思っているのですが、とりあえず方向としてはこんな感じです。 > > この機能は私はいらないと思っています。 > 出力時に指定するのではなく、XML宣言を書き換えて変更するAPIの > 方がよいと思っています。(なので今のままでよい。) XML 宣言で用いるエンコーディングと、変換で用いるエンコーディングを別に したいケースがあるのですよ。 代表例が Windows-31J と Shift_JIS、CP51932 と EUC-JP です。 -- NARUSE, Yui