ext/riconv.c in rjb-1.4.9 vs ext/riconv.c in rjb-1.5.0

- old
+ new

@@ -167,10 +167,20 @@ objIconvR2J = objIconvJ2R = Qnil; } } #endif +#if defined(DEBUG) +static void debug_out(VALUE v) +{ + char* p = StringValuePtr(v); + printf("-- %d, %d, %s\n", rb_num2long(rb_funcall(v, rb_intern("size"), 0)), + strlen(p), p); + fflush(stdout); +} +#endif + VALUE exticonv_local_to_utf8(VALUE local_string) { #if RJB_RUBY_VERSION_CODE < 190 check_kcode(); if(RTEST(objIconvR2J)) @@ -180,20 +190,22 @@ else { return local_string; } #else - VALUE rb_cEncoding, encoding, sjis, eucjp, iso2022jp; + VALUE rb_cEncoding, encoding, utf8; rb_cEncoding = rb_const_get(rb_cObject, rb_intern("Encoding")); - sjis = rb_const_get(rb_cEncoding, rb_intern("SHIFT_JIS")); - eucjp = rb_const_get(rb_cEncoding, rb_intern("EUC_JP")); - iso2022jp = rb_const_get(rb_cEncoding, rb_intern("ISO_2022_JP")); encoding = rb_funcall(local_string, rb_intern("encoding"), 0); - - if (encoding == sjis || encoding == eucjp || encoding == iso2022jp) + utf8 = rb_const_get(rb_cEncoding, rb_intern("UTF_8")); + if (encoding != utf8) { - return rb_funcall(local_string, rb_intern("encode"), 1, rb_str_new2("utf-8")); + VALUE ret = rb_funcall(local_string, rb_intern("encode"), 2, utf8, encoding); +#if defined(DEBUG) + debug_out(local_string); + debug_out(ret); +#endif + return ret; } else { return local_string; } @@ -211,8 +223,8 @@ else { return utf8_string; } #else - return rb_funcall(utf8_string, rb_intern("force_encoding"), 1, rb_str_new2("utf-8")); + return rb_funcall(utf8_string, rb_intern("force_encoding"), 1, rb_const_get(rb_cEncoding, rb_intern("UTF_8"))); #endif }