Skip to content

Commit

Permalink
Accept external and internal encodings pair
Browse files Browse the repository at this point in the history
Fix #16
  • Loading branch information
nobu committed May 30, 2022
1 parent a83ddbb commit c8a69e8
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 1 deletion.
9 changes: 8 additions & 1 deletion ext/stringio/stringio.c
Original file line number Diff line number Diff line change
Expand Up @@ -1719,7 +1719,14 @@ strio_set_encoding(int argc, VALUE *argv, VALUE self)
enc = rb_default_external_encoding();
}
else {
enc = rb_to_encoding(ext_enc);
enc = rb_find_encoding(ext_enc);
if (!enc) {
struct rb_io_enc_t convconfig;
int oflags, fmode;
VALUE vmode = rb_str_append(rb_str_new_cstr("r:"), ext_enc);
rb_io_extract_modeenc(&vmode, 0, Qnil, &oflags, &fmode, &convconfig);
enc = convconfig.enc2;
}
}
ptr->enc = enc;
if (WRITABLE(self)) {
Expand Down
6 changes: 6 additions & 0 deletions test/stringio/test_stringio.rb
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,12 @@ def test_set_encoding
f.set_encoding(Encoding::ASCII_8BIT)
}
assert_equal("foo\x83".b, f.gets)

f = StringIO.new()
f.set_encoding("ISO-8859-16:ISO-8859-1")
assert_equal(Encoding::ISO_8859_16, f.external_encoding)
assert_equal(Encoding::ISO_8859_16, f.string.encoding)
assert_nil(f.internal_encoding)
end

def test_mode_error
Expand Down

0 comments on commit c8a69e8

Please sign in to comment.