From: rubikitch@... Date: 2008-03-18T11:41:10+09:00 Subject: [ruby-dev:34077] 異なるエンコーディングだと同じバイト列でも==にならない件 るびきちです。 Ruby 1.9では同じバイト列であっても異なるエンコーディングの場合は == にはなりません。 方向性としては正しいかもしれませんが、ハマるケースが多いのではないでしょうか? たとえばネットワークから読み込んだときサーバーが実際と異なるcharsetを吐き出した場合とか。 身近な例では何気なく下のようなコードを書いた場合です。 String#inspectがencoding情報を表示しない以上、 「同じ文字列なのになんで==にならないの!?おかしい!」と思う人が多いと思います。 僕としては、エンコーディングは空気のような存在であるべきだと思っています。 いちいちforce_encodingをつけるのも気持ち悪いですし。 異なるエンコーディングの文字列を結合できないのは当然だと思いますが、 せめて == での比較は許してもいいのではないでしょうか? Rubyの == はFixnumとFloatの比較を許すなど空気を読んでくれる演算子だと思っていますが、 現状の String#== は厳密すぎると思います。 より厳密な比較ならばeql?がありますし。 # -*- coding: euc-jp -*- # 日本語を含むコード RUBY_VERSION # => "1.9.0" RUBY_RELEASE_DATE # => "2008-03-14" GZIP_MAGIC = "\x1F\x8B" open("/tmp/compressed.txt.gz", "r") do |f| magic = f.read(2) # => "\x1F\x8B" magic == GZIP_MAGIC # => false if GZIP_MAGIC.respond_to? :encoding GZIP_MAGIC.encoding # => # magic.encoding # => # end end -- rubikitch Blog: http://d.hatena.ne.jp/rubikitch/ Site: http://www.rubyist.net/~rubikitch/