diff options
Diffstat (limited to 'ext/kconv/kconv.c')
-rw-r--r-- | ext/kconv/kconv.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/ext/kconv/kconv.c b/ext/kconv/kconv.c index 6778afcfe6..011b8b6b61 100644 --- a/ext/kconv/kconv.c +++ b/ext/kconv/kconv.c @@ -1787,6 +1787,20 @@ kconv_kconv(argc, argv) if (NIL_P(out)) { out_code = _JIS; } + else if (TYPE(out) == T_STRING) { + switch (RSTRING(out)->ptr[0]) { + case 'E': case 'e': + out_code = _EUC; + break; + case 'S': case 's': + out_code = _SJIS; + break; + case 'J': case 'j': + default: + out_code = _JIS; + break; + } + } else { out_code = NUM2INT(out); if (out_code == _NOCONV) return (VALUE)src; @@ -1794,6 +1808,22 @@ kconv_kconv(argc, argv) if (NIL_P(in)) { in_code = _AUTO; } + else if (TYPE(in) == T_STRING) { + switch (RSTRING(in)->ptr[0]) { + case 'E': case 'e': + in_code = _EUC; + break; + case 'S': case 's': + in_code = _SJIS; + break; + case 'J': case 'j': + in_code = _JIS; + break; + default: + in_code = _AUTO; + break; + } + } else { in_code = NUM2INT(in); if (in_code == _NOCONV) return (VALUE)src; |