Ruby конвертирует непечатаемые символы в числа

У меня есть строка с непечатаемыми символами.

В настоящее время я заменяю их тильдой, используя:

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

Однако на самом деле я хотел бы преобразовать их в целочисленное значение.

Я пробовал это, но он всегда выводит 0

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

Мысли?


person Dan Grahn    schedule 22.11.2013    source источник


Ответы (2)


String#gsub, String#gsub! принять необязательный блок. Возвращаемое значение блока используется для подстановки.

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

Object#inspect также можно использовать, если просто нужно вывести строку с непечатаемыми символами для регистрации или в целях отладки.

puts "\x01Hello\x02".inspect
# => "\u0001Hello\u0002"
person Mike    schedule 27.04.2015