From: "NARUSE, Yui" <yui.naruse / gmail.com>
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                    # => #<Encoding:EUC-JP>
ascii = euc.dup.force_encoding "ASCII-8BIT"
ascii.encoding                  # => #<Encoding:ASCII-8BIT>
euc == ascii                    # => false

一方がASCII-8BITの場合に == をバイト列単位での比較に挙動を変更した場合、
どういう問題があるのでしょうか?
それに伴い "文字列".as_binary とかでASCII-8BITなStringが作れると嬉しいです。

--
rubikitch
Blog: http://d.hatena.ne.jp/rubikitch/
Site: http://www.rubyist.net/~rubikitch/