[win32] Transcode input from console [Bug #18353]

On Windows, as the input from console is encoded in the active
code page, convert the input to the internal encoding.
This commit is contained in:
Nobuyoshi Nakada 2021-12-01 15:05:16 +09:00
parent 0b53a8895f
commit 37cd35aea8
Notes: git 2021-12-01 18:54:48 +09:00

12
io.c
View File

@ -12224,6 +12224,18 @@ rb_stdio_set_default_encoding(void)
{
VALUE val = Qnil;
#ifdef _WIN32
if (isatty(fileno(stdin))) {
rb_encoding *external = rb_locale_encoding();
rb_encoding *internal = rb_default_internal_encoding();
if (!internal) internal = rb_default_external_encoding();
io_encoding_set(RFILE(rb_stdin)->fptr,
rb_enc_from_encoding(external),
rb_enc_from_encoding(internal),
Qnil);
}
else
#endif
rb_io_set_encoding(1, &val, rb_stdin);
rb_io_set_encoding(1, &val, rb_stdout);
rb_io_set_encoding(1, &val, rb_stderr);