From: rubikitch@... Date: 2008-03-18T15:29:58+09:00 Subject: [ruby-dev:34083] Re: 異なるエンコーディングだと同じバイト列でも==にならない件 From: "NARUSE, Yui" Subject: [ruby-dev:34081] Re: 異なるエンコーディングだと同じバイト列でも==にならない件 Date: Tue, 18 Mar 2008 14:22:16 +0900 エンコーディングの理解が不十分ですみません。 > > String#inspectがencoding情報を表示しない以上、 > > 「同じ文字列なのになんで==にならないの!?おかしい!」と思う人が多いと思います。 > > String#inspect は永続化用のメソッドではありませんから。 > たぶん inspect で encoding が表示されてもうれしくないんじゃないですかねぇ。 デバッグ時には助かるときもあると思いますが。 たとえば、$VERBOSEや$DEBUGがtrueのときにエンコーディングも表示してくれるとか、 そういう路線はありでしょうか? > # 方向性としては、むしろ EUC-JP の "あ" と Shift_JIS の "あ" で == が成立するとか、 > # そっちの方向に進むのがあるべき姿じゃないかと。 なるほど。こっちの方が嬉しいです。 それを推し進めるとして、「EUC-JP文字列 + Shift_JIS文字列」は現状でエラーですが、 Shift_JIS文字列をEUC-JPに変換して結合するふうに挙動を変えたとしたら、 どういう問題があるのでしょうか? やっぱりオーバーヘッドが大きすぎですか。 # 変換不可能なエンコーディングの場合は当然エラーに。 > なお、ここの force_encoding が面倒ならば、バイト列リテラルの提案という手もあります。 euc = "日本語" euc.encoding # => # ascii = euc.dup.force_encoding "ASCII-8BIT" ascii.encoding # => # euc == ascii # => false 一方がASCII-8BITの場合に == をバイト列単位での比較に挙動を変更した場合、 どういう問題があるのでしょうか? それに伴い "文字列".as_binary とかでASCII-8BITなStringが作れると嬉しいです。 -- rubikitch Blog: http://d.hatena.ne.jp/rubikitch/ Site: http://www.rubyist.net/~rubikitch/