Ruby 1.9だとエンコーディングが異なると同じバイト列の文字列でも==にならない
# -*- coding: euc-jp -*- RUBY_VERSION # => "1.9.0" GZIP_MAGIC = "\x1F\x8B" open("/tmp/compressed.txt.gz", "r") do |f| magic = f.read(2) # => "\x1F\x8B" magic == GZIP_MAGIC # => false GZIP_MAGIC.encoding # => #<Encoding:EUC-JP> magic.encoding # => #<Encoding:ASCII-8BIT> end
Ruby 1.9だとエンコーディングが異なると同じバイト列の文字列でも == にはならない。何気なく↑のようなスクリプトを書いてるとハマってしまう。エンコーディングを導入したからエンコーディング変換とかはできるけど、余計なお世話な場合もあってこの仕様は正直ひどいと思う。
「"\x1F\x8B".force_encoding "ASCII-8BIT"」とすりゃいいんだけどRuby 1.8だとそもそも不要だっただけに気持ち悪い。