From: "U.Nakamura" Date: 2007-12-28T17:02:11+09:00 Subject: [ruby-dev:32862] Re: Windowでのデフォルトエンコーディング こんにちは、なかむら(う)です。 In message "[ruby-dev:32858] Re: Windowでのデフォルトエンコーディング" on Dec.28,2007 15:21:10, wrote: | readline を使っている irb だと文字列が ASCII-8BIT になるようです。-- | noreadline つけたら変わりました。なので、[ruby-dev:32853] は間違っています。 うちのNetBSDでは--enable-editをつけてあって、libeditはマルチ バイト文字を受け付けないので--noreadlineなのでした。なるほど。 というわけで、readlineのパッチです。 Index: ext/readline/readline.c =================================================================== --- ext/readline/readline.c (revision 14764) +++ ext/readline/readline.c (working copy) @@ -29,6 +29,7 @@ #endif static VALUE mReadline; +static VALUE id_var_input; #define TOLOWER(c) (isupper(c) ? tolower(c) : c) @@ -93,8 +94,13 @@ readline_readline(int argc, VALUE *argv, if (RTEST(add_hist) && buff) { add_history(buff); } - if (buff) + if (buff) { + VALUE input = rb_ivar_get(self, id_var_input); + rb_io_t *ifp; + GetOpenFile(input, ifp); result = rb_tainted_str_new2(buff); + rb_enc_associate(result, ifp->enc ? ifp->enc : (ifp->mode & FMODE_BINMODE) ? rb_ascii8bit_encoding() : rb_default_external_encoding()); + } else result = Qnil; if (buff) free(buff); @@ -110,6 +116,7 @@ readline_s_set_input(VALUE self, VALUE i Check_Type(input, T_FILE); GetOpenFile(input, ifp); rl_instream = rb_io_stdio_file(ifp); + rb_ivar_set(self, id_var_input, input); return input; } @@ -755,6 +762,9 @@ Init_readline() rb_define_singleton_method(mReadline, "filename_quote_characters", readline_s_get_filename_quote_characters, 0); + id_var_input = rb_intern("#input"); + rb_ivar_set(mReadline, id_var_input, rb_stdin); + history = rb_obj_alloc(rb_cObject); rb_extend_object(history, rb_mEnumerable); rb_define_singleton_method(history,"to_s", hist_to_s, 0); それでは。 -- U.Nakamura