Project

General

Profile

Actions

Bug #5920

closed

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

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

Status:
Rejected
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

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
Actions

Also available in: Atom PDF

Like0
Like0Like0