Project

General

Profile

Bug #5920

Encoding.compatible? gives inconsistent results with String vs Encoding arguments

Added by brixen (Brian Shirai) over 7 years ago. Updated over 7 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin10.8.0]
Backport:
[ruby-core:42202]

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

History

Updated by naruse (Yui NARUSE) over 7 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) over 7 years ago

  • Status changed from Open to Rejected

Also available in: Atom PDF