class String

Public Instance Methods

scrub → new_str click to toggle source
scrub(repl) → new_str
scrub{|bytes|} → new_str

If the string is invalid byte sequence then replace invalid bytes with given replacement character, else returns self. If block is given, replace invalid bytes with returned value of the block.

"abc\u3042\x81".scrub #=> "abc\u3042\uFFFD"
"abc\u3042\x81".scrub("*") #=> "abc\u3042*"
"abc\u3042\xE3\x80".scrub{|bytes| '<'+bytes.unpack('H*')[0]+'>' } #=> "abc\u3042<e380>"
VALUE
rb_str_scrub(int argc, VALUE *argv, VALUE str)
{
    VALUE new = str_scrub0(argc, argv, str);
    return NIL_P(new) ? rb_str_dup(str): new;
}
scrub! → str click to toggle source
scrub!(repl) → str
scrub!{|bytes|} → str

If the string is invalid byte sequence then replace invalid bytes with given replacement character, else returns self. If block is given, replace invalid bytes with returned value of the block.

"abc\u3042\x81".scrub! #=> "abc\u3042\uFFFD"
"abc\u3042\x81".scrub!("*") #=> "abc\u3042*"
"abc\u3042\xE3\x80".scrub!{|bytes| '<'+bytes.unpack('H*')[0]+'>' } #=> "abc\u3042<e380>"
static VALUE
str_scrub_bang(int argc, VALUE *argv, VALUE str)
{
    VALUE new = str_scrub0(argc, argv, str);
    if (!NIL_P(new)) rb_str_replace(str, new);
    return str;
}