Issue #13124 has been updated by Benoit Daloze.


Thank you for the reply and pointer.

What do you think of having STDOUT, STDERR and STDIN internal_encoding be set by default?
It seems reasonable for those to use the locale encoding.
On the other hand, it seems useless to dump a wide-char String as raw bytes,
it can only be misinterpreted on such a stream.
(Or even more confusing like above where the input is barely related to the actual characters)

Maybe it would be worth to make that an experiment and see what is the impact on compatibility?

----------------------------------------
Feature #13124: Should #puts convert to external encoding?
https://bugs.ruby-lang.org/issues/13124#change-62660

* Author: Benoit Daloze
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 2.5
----------------------------------------
For instance:

    puts "?\x00\x42\x30".force_encoding(Encoding::UTF_16LE)
    ?B0

    puts "?\x00\x42\x30".force_encoding(Encoding::UTF_16LE).encode("utf-8")
    ?дв

The first result is surprising to me. It seems to treat the String as raw bytes and just "assume" they are displayable in the external encoding.

Should #puts re-encode the String to print in Encoding.default_external or the locale encoding?

    STDOUT.set_encoding(Encoding.find("locale"))

seems to do what I expect, but should that be the default?



-- 
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>