Search code examples
rubyregexstringnon-printing-characters

Ruby convert non-printable characters into numbers


I have a string with non-printable characters.

What I am currently doing is replacing them with a tilde using:

string.gsub!(/^[:print:]]/, "~")

However, I would actually like to convert them to their integer value.

I tried this, but it always outputs 0

string.gsub!(/[^[:print:]]/, "#{$1.to_i}")

Thoughts?


Solution

  • String#gsub, String#gsub! accept optional block. The return value of the block is used for substitution.

    "\x01Hello\x02".gsub(/[^[:print:]]/) { |x| x.ord }
    # => "1Hello2"