@@ -1359,6 +1359,29 @@ str_b(mrb_state *mrb, mrb_value self)
13591359 return str ;
13601360}
13611361
1362+ 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)
14001423 mrb_define_method_id (mrb , s , MRB_SYM_Q (valid_encoding ), str_valid_enc_p , MRB_ARGS_NONE ());
14011424 mrb_define_method_id (mrb , s , MRB_SYM_Q (ascii_only ), str_ascii_only_p , MRB_ARGS_NONE ());
14021425 mrb_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 ));
14031427
14041428 mrb_define_method_id (mrb , s , MRB_SYM (__lines ), str_lines , MRB_ARGS_NONE ());
14051429 mrb_define_method_id (mrb , s , MRB_SYM (__codepoints ), str_codepoints , MRB_ARGS_NONE ());
0 commit comments