diff --git a/ext/stringio/stringio.c b/ext/stringio/stringio.c index 4eb1511..c49c4a8 100644 --- a/ext/stringio/stringio.c +++ b/ext/stringio/stringio.c @@ -1187,9 +1187,7 @@ prepare_getline_args(struct StringIO *ptr, struct getline_arg *arg, int argc, VA rs = rs; } else { - rb_raise(rb_eArgError, "encoding mismatch: %s IO with %s RS", - rb_enc_name(enc_io), - rb_enc_name(enc_rs)); + rs = rb_str_conv_enc(rs, enc_rs, enc_io); } } } diff --git a/test/stringio/test_stringio.rb b/test/stringio/test_stringio.rb index 15fcc21..918b67b 100644 --- a/test/stringio/test_stringio.rb +++ b/test/stringio/test_stringio.rb @@ -94,6 +94,11 @@ def test_gets_utf_16 assert_equal("line2\n".encode("utf-16le"), stringio.gets) assert_equal("line3\n".encode("utf-16le"), stringio.gets) assert_nil(stringio.gets) + stringio.rewind + assert_equal("line1\n".encode("utf-16le"), stringio.gets("\n")) + assert_equal("line2\n".encode("utf-16le"), stringio.gets("\n")) + assert_equal("line3\n".encode("utf-16le"), stringio.gets("\n")) + assert_nil(stringio.gets) end def test_gets_chomp