Issue #13124 has been updated by naruse (Yui NARUSE).

Target version deleted (2.5)

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

For STDOUT, it's worth considering.
But it breaks command line utilities which handles encoding other than locale.
I think people who want automatic conversion on STDOUT is not so many to break the compatibility.

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

* Author: Eregon (Benoit Daloze)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
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>