summaryrefslogtreecommitdiff
path: root/ext/nkf
diff options
context:
space:
mode:
Diffstat (limited to 'ext/nkf')
-rw-r--r--ext/nkf/nkf-utf8/nkf.c18
-rw-r--r--ext/nkf/nkf.c6
2 files changed, 19 insertions, 5 deletions
diff --git a/ext/nkf/nkf-utf8/nkf.c b/ext/nkf/nkf-utf8/nkf.c
index 523462362b..df062e0a35 100644
--- a/ext/nkf/nkf-utf8/nkf.c
+++ b/ext/nkf/nkf-utf8/nkf.c
@@ -693,6 +693,20 @@ static int nkf_enc_find_index(const char *name)
return index;
}
+static nkf_encoding *nkf_enc_without_bom(nkf_encoding *enc)
+{
+ int idx;
+ switch (enc->id) {
+ case UTF_8_BOM: idx = UTF_8; break;
+ case UTF_16BE_BOM: idx = UTF_16BE; break;
+ case UTF_16LE_BOM: idx = UTF_16LE; break;
+ case UTF_32BE_BOM: idx = UTF_32BE; break;
+ case UTF_32LE_BOM: idx = UTF_32LE; break;
+ default: return enc;
+ }
+ return &nkf_encoding_table[idx];
+}
+
static nkf_encoding *nkf_enc_find(const char *name)
{
int idx = -1;
@@ -5897,8 +5911,7 @@ void options(unsigned char *cp)
} else if (cp[0] == 'B') {
cp++;
} else {
- output_encoding = nkf_enc_from_index(enc_idx);
- continue;
+ goto utf_no_endian;
}
if (cp[0] == '0'){
cp++;
@@ -5907,6 +5920,7 @@ void options(unsigned char *cp)
: (output_endian == ENDIAN_LITTLE ? UTF_32LE : UTF_32BE);
} else {
output_bom_f = TRUE;
+ utf_no_endian:
enc_idx = enc_idx == UTF_16
? (output_endian == ENDIAN_LITTLE ? UTF_16LE_BOM : UTF_16BE_BOM)
: (output_endian == ENDIAN_LITTLE ? UTF_32LE_BOM : UTF_32BE_BOM);
diff --git a/ext/nkf/nkf.c b/ext/nkf/nkf.c
index c11a042c57..eb7d76af14 100644
--- a/ext/nkf/nkf.c
+++ b/ext/nkf/nkf.c
@@ -160,7 +160,7 @@ rb_nkf_convert(VALUE obj, VALUE opt, VALUE src)
rb_str_set_len(result, output_ctr);
OBJ_INFECT(result, src);
- rb_enc_associate(result, rb_nkf_enc_get(nkf_enc_name(output_encoding)));
+ rb_enc_associate(result, rb_nkf_enc_get(nkf_enc_name(nkf_enc_without_bom(output_encoding))));
return result;
}
@@ -480,8 +480,8 @@ Init_nkf()
rb_define_const(mNKF, "EUC", rb_enc_from_encoding(rb_nkf_enc_get("EUC-JP")));
rb_define_const(mNKF, "SJIS", rb_enc_from_encoding(rb_nkf_enc_get("Shift_JIS")));
rb_define_const(mNKF, "UTF8", rb_enc_from_encoding(rb_utf8_encoding()));
- rb_define_const(mNKF, "UTF16", rb_enc_from_encoding(rb_nkf_enc_get("UTF-16")));
- rb_define_const(mNKF, "UTF32", rb_enc_from_encoding(rb_nkf_enc_get("UTF-32")));
+ rb_define_const(mNKF, "UTF16", rb_enc_from_encoding(rb_nkf_enc_get("UTF-16BE")));
+ rb_define_const(mNKF, "UTF32", rb_enc_from_encoding(rb_nkf_enc_get("UTF-32BE")));
/* Full version string of nkf */
rb_define_const(mNKF, "VERSION", rb_str_new2(RUBY_NKF_VERSION));