Issue #8289 has been updated by Khalil Fazal.


A work around for my own projects:

~~~ ruby
class Array
  alias_method :old_join, :join

  # A work around for https://bugs.ruby-lang.org/issues/8289
  def join(separator = $,)
    '' + old_join(separator)
  end
end

puts ["abc"].join.encoding
puts [].join.encoding
puts [].join.encode("utf-8").encoding
~~~

Actual result:

~~~ text
UTF-8
UTF-8
UTF-8
~~~

as expected.

I'm posting in this old bug report for future readers.
I do not expect this change to be merged into ruby master.

----------------------------------------
Bug #8289: [].join.encoding # =>  US-ASCII  (I expect also UTF-8
https://bugs.ruby-lang.org/issues/8289#change-62332

* Author: Peter Vandenabeele
* Status: Rejected
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.1.0dev (2013-04-19) [x86_64-darwin12.3.0]
* Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN
----------------------------------------
May be related to http://bugs.ruby-lang.org/issues/5379

$ date
Thu Apr 18 23:56:54 CEST 2013

$ rvm get stable

$ rvm install ruby-head
... long compile process ...

$ rvm use ruby-head
Using /Users/peter_v/.rvm/gems/ruby-head

$ ruby -v
ruby 2.1.0dev (2013-04-19) [x86_64-darwin12.3.0]

$ cat empty_array_join_returns_ASCII_encoding.rb 
puts ["abc"].join.encoding
puts [].join.encoding
puts [].join.encode("utf-8").encoding

# Actual result:

$ ruby -v empty_array_join_returns_ASCII_encoding.rb 
ruby 2.1.0dev (2013-04-19) [x86_64-darwin12.3.0]
UTF-8
US-ASCII
UTF-8

# Expected result

$ ruby -v empty_array_join_returns_ASCII_encoding.rb 
ruby 2.1.0dev (2013-04-19) [x86_64-darwin12.3.0]
UTF-8
UTF-8  # This is edited for expected result (not the actual result)
UTF-8

I would expect that in Ruby 2.0 with UTF-8 as default encoding,
the returned encoding of an array (with default encoding strings),
is _always_ UTF-8, independent of the size of the array.

The current behaviour breaks my tests for an output encoding of
UTF-8 in the case the array is empty.

My work around is  `array.join().encode("utf-8")` which works, but is ugly.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>