From 37cd35aea8afa35476640e454eaf2c53150dc014 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Wed, 1 Dec 2021 15:05:16 +0900 Subject: [PATCH] [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. --- io.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/io.c b/io.c index 366225089c..b2ca5a69e3 100644 --- a/io.c +++ b/io.c @@ -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);