diff options
author | Lars Kanis <[email protected]> | 2020-12-07 17:48:37 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2020-12-08 01:48:37 +0900 |
commit | 94b6933d1c6f4c8698319fbcac9dcecc9033b4b9 (patch) | |
tree | 6950fff7edffd487a5fd40b154e8f875bddecd82 | |
parent | 3bf7b999e503199e2e9fe68ade25ee6830b3e57e (diff) |
Set default for Encoding.default_external to UTF-8 on Windows (#2877)
* Use UTF-8 as default for Encoding.default_external on Windows
* Document UTF-8 change on Windows to Encoding.default_external
fix https://bugs.ruby-lang.org/issues/16604
Notes
Notes:
Merged-By: nurse <[email protected]>
-rw-r--r-- | encoding.c | 4 | ||||
-rw-r--r-- | ruby.c | 7 | ||||
-rw-r--r-- | spec/ruby/command_line/dash_upper_k_spec.rb | 4 | ||||
-rw-r--r-- | spec/ruby/library/stringio/binmode_spec.rb | 2 |
4 files changed, 11 insertions, 6 deletions
diff --git a/encoding.c b/encoding.c index e1441caec2..64748ceb27 100644 --- a/encoding.c +++ b/encoding.c @@ -1684,7 +1684,9 @@ rb_enc_default_external(void) * File data written to disk will be transcoded to the default external * encoding when written, if default_internal is not nil. * - * The default external encoding is initialized by the locale or -E option. + * The default external encoding is initialized by the -E option. + * If -E isn't set, it is initialized to UTF-8 on Windows and the locale on + * other operating systems. */ static VALUE get_default_external(VALUE klass) @@ -1819,6 +1819,9 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) Init_ruby_description(); Init_enc(); lenc = rb_locale_encoding(); +#if UTF8_PATH + uenc = rb_utf8_encoding(); +#endif rb_enc_associate(rb_progname, lenc); rb_obj_freeze(rb_progname); parser = rb_parser_new(); @@ -1839,7 +1842,7 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) enc = rb_enc_from_index(opt->ext.enc.index); } else { - enc = lenc; + enc = IF_UTF8_PATH(uenc, lenc); } rb_enc_set_default_external(rb_enc_from_encoding(enc)); if (opt->intern.enc.index >= 0) { @@ -1944,7 +1947,7 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) enc = rb_enc_from_index(opt->ext.enc.index); } else { - enc = lenc; + enc = IF_UTF8_PATH(uenc, lenc); } rb_enc_set_default_external(rb_enc_from_encoding(enc)); if (opt->intern.enc.index >= 0) { diff --git a/spec/ruby/command_line/dash_upper_k_spec.rb b/spec/ruby/command_line/dash_upper_k_spec.rb index a060eab793..7e71532295 100644 --- a/spec/ruby/command_line/dash_upper_k_spec.rb +++ b/spec/ruby/command_line/dash_upper_k_spec.rb @@ -58,8 +58,8 @@ describe 'The -K command line option' do end it "ignores unknown codes" do - locale = Encoding.find('locale') + external = Encoding.find('external') ruby_exe(@test_string, options: '-KZ').should == - [Encoding::UTF_8.name, locale.name, nil].inspect + [Encoding::UTF_8.name, external.name, nil].inspect end end diff --git a/spec/ruby/library/stringio/binmode_spec.rb b/spec/ruby/library/stringio/binmode_spec.rb index 83178787f3..853d9c9bd6 100644 --- a/spec/ruby/library/stringio/binmode_spec.rb +++ b/spec/ruby/library/stringio/binmode_spec.rb @@ -9,7 +9,7 @@ describe "StringIO#binmode" do it "changes external encoding to BINARY" do io = StringIO.new - io.external_encoding.should == Encoding.find('locale') + io.external_encoding.should == Encoding.find('external') io.binmode io.external_encoding.should == Encoding::BINARY end |