e$B@.@%$G$9e(B
NARUSE, Yui wrote:
e$B0l$D$NJ}K!$H$7$F!“8=:_$Ne(B Encoding.default_external e$B0J30$K!”$=$N%"%W%je(B
e$B%1!<%7%g%s$N<g$?$kFbIt%(%s%3!<%G%#%s%0$rL@<($9$kJ}K!$rMQ0U$9$k!=!=Nc$($Pe(B
Encoding.primary_encoding e$B$r:n$l$P$$$$$+$J$!$H;W$C$F$$$k$N$G$9$,1F6AHO0Oe(B
e$B$r$^$@9M$($-$l$F$$$^$;$s!#e(B
e$B$H$j$"$($:e(B default_internal e$B$H$$$&$b$N$r:n$C$F$_$^$7$?!#e(B
e$BNc$($P!“e(Binspect e$B$NNc$G$9$H!“e(B
irb(main):006:0> [”\x82\xa0”.force_encoding(“sjis”),
irb(main):007:1* “\xa4\xa2”.force_encoding(“euc-jp”),
irb(main):008:1* “\xe3\x81\x82”.force_encoding(“utf-8”)]
=> ["\x82\xA0", “\xA4\xA2”, "e$B$“e(B”]
e$B$3$s$J46$8$K$J$j$^$9!#e(B
=== encoding.c
— encoding.c (revision 15414)
+++ encoding.c (local)
@@ -1030,6 +1030,40 @@
return rb_enc_from_index(idx);
}
+static int default_internal_index;
+
+rb_default_internal_encoding(void)
- return rb_enc_from_index(default_internal_index);
-
+VALUE
+rb_enc_default_internal(void)
+{
- return rb_enc_from_encoding(rb_default_internal_encoding());
+}
-
+/*
-
-
- Encoding.default_internal => enc
-
-
- Returns default internal encoding.
-
-
- It is initialized by the encoding of main script.
- */
+static VALUE
+get_default_internal(VALUE klass)
+{
- return rb_enc_default_internal();
+}
-
+void
+rb_enc_set_default_internal(VALUE encoding)
+{
- default_internal_index = rb_enc_to_index(rb_to_encoding(encoding));
+}
-
static int default_external_index;
rb_encoding *
@@ -1246,6 +1280,7 @@
rb_define_method(rb_cEncoding, “_dump”, enc_dump, -1);
rb_define_singleton_method(rb_cEncoding, “_load”, enc_load, 1);
- rb_define_singleton_method(rb_cEncoding, “default_internal”,
get_default_in
ternal, 0);
rb_define_singleton_method(rb_cEncoding, “default_external”,
get_default_ex
ternal, 0);
rb_define_singleton_method(rb_cEncoding, “locale_charmap”,
rb_locale_charma
p, 0);
=== string.c
— string.c (revision 15414)
+++ string.c (local)
@@ -3314,7 +3314,7 @@
VALUE
rb_str_inspect(VALUE str)
{
- rb_encoding *enc = STR_ENC_GET(str);
- rb_encoding *enc = rb_default_internal_encoding();
char *p, *pend;
VALUE result = rb_str_buf_new2("");
=== ruby.c
— ruby.c (revision 15414)
+++ ruby.c (local)
@@ -1021,6 +1021,7 @@
rb_enc_associate(opt->e_script, eenc);
require_libraries();
tree = rb_parser_compile_string(parser, opt->script,
opt->e_script, 1);
rb_enc_set_default_internal(rb_enc_from_encoding(rb_locale_encoding()));
return tree;
}
=== include/ruby/encoding.h
— include/ruby/encoding.h (revision 15414)
+++ include/ruby/encoding.h (local)
@@ -164,9 +164,12 @@
rb_encoding *rb_utf8_encoding(void);
rb_encoding *rb_usascii_encoding(void);
rb_encoding *rb_locale_encoding(void);
+rb_encoding *rb_default_internal_encoding(void);
rb_encoding *rb_default_external_encoding(void);
int rb_usascii_encindex(void);
+VALUE rb_enc_default_internal(void);
VALUE rb_enc_default_external(void);
+void rb_enc_set_default_internal(VALUE encoding);
void rb_enc_set_default_external(VALUE encoding);
VALUE rb_locale_charmap(VALUE klass);