Bug #5920
closedEncoding.compatible? gives inconsistent results with String vs Encoding arguments
Description
Is this a bug? If I pass two strings that have the same encodings as the Encoding instances I pass directly, I get different results.
$ irb
ruby-1.9.3-p0 :001 > Encoding.compatible?(Encoding::EUC_JP, Encoding::UTF_8)
=> nil
ruby-1.9.3-p0 :002 > a = "abc".encode "euc-jp"
=> "abc"
ruby-1.9.3-p0 :003 > a.encoding
=> #Encoding:EUC-JP
ruby-1.9.3-p0 :004 > a.valid_encoding?
=> true
ruby-1.9.3-p0 :005 > b = "def".encode "utf-8"
=> "def"
ruby-1.9.3-p0 :006 > b.encoding
=> #Encoding:UTF-8
ruby-1.9.3-p0 :007 > b.valid_encoding?
=> true
ruby-1.9.3-p0 :008 > Encoding.compatible?(a, b)
=> #Encoding:EUC-JP
ruby-1.9.3-p0 :009 > a << b
=> "abcdef"
ruby-1.9.3-p0 :010 > a.encoding
=> #Encoding:EUC-JP
ruby-1.9.3-p0 :011 > a.valid_encoding?
=> true
If this is not a bug, could someone please explain the rationale behind the behavior.
Thanks,
Brian
Updated by naruse (Yui NARUSE) over 12 years ago
It is intended.
The original meaning of Encoding.compatible?(str1, str2) is the encoding of concatenated string.
In other codes, it is
str = str1.dup.concat str2
str.encoding <- this!
If an object is an encoding object, it is considered as a string which is valid, has the encoding, and not ASCII only.
For example UTF-8, Encoding::UTF_8 is considered as a string like "\u3042".
Updated by naruse (Yui NARUSE) about 12 years ago
- Status changed from Open to Rejected