@@ -1359,6 +1359,29 @@ str_b(mrb_state *mrb, mrb_value self)
13591359return str;
13601360}
136113611362+static mrb_value
1363+str_force_encoding(mrb_state *mrb, mrb_value self)
1364+{
1365+mrb_value enc;
1366+1367+mrb_get_args(mrb, "S", &enc);
1368+1369+struct RString *s = mrb_str_ptr(self);
1370+if (ENC_COMP_P(enc, ENC_ASCII_8BIT) ||
1371+ENC_COMP_P(enc, ENC_BINARY)) {
1372+s->flags |= MRB_STR_BINARY;
1373+ }
1374+#ifdef MRB_UTF8_STRING
1375+else if (ENC_COMP_P(enc, ENC_UTF8)) {
1376+s->flags &= ~MRB_STR_BINARY;
1377+ }
1378+#endif
1379+else {
1380+mrb_raisef(mrb, E_ARGUMENT_ERROR, "unknown encoding name - %v", enc);
1381+ }
1382+return self;
1383+}
1384+13621385void
13631386mrb_mruby_string_ext_gem_init(mrb_state* mrb)
13641387{
@@ -1400,6 +1423,7 @@ mrb_mruby_string_ext_gem_init(mrb_state* mrb)
14001423mrb_define_method_id(mrb, s, MRB_SYM_Q(valid_encoding), str_valid_enc_p, MRB_ARGS_NONE());
14011424mrb_define_method_id(mrb, s, MRB_SYM_Q(ascii_only), str_ascii_only_p, MRB_ARGS_NONE());
14021425mrb_define_method_id(mrb, s, MRB_SYM(b), str_b, MRB_ARGS_NONE());
1426+mrb_define_method_id(mrb, s, MRB_SYM(force_encoding), str_force_encoding, MRB_ARGS_REQ(1));
1403142714041428mrb_define_method_id(mrb, s, MRB_SYM(__lines), str_lines, MRB_ARGS_NONE());
14051429mrb_define_method_id(mrb, s, MRB_SYM(__codepoints), str_codepoints, MRB_ARGS_NONE());