У меня есть набор строк со специальными управляющими кодами, которые я хочу сохранить без экранирования - например, интерпретатор показывает
"\\014\"\\000\"\\016smoothing\"\\011mean\"\\022color\"\\011zero@\\016"
но я хочу это показать (при проверке) как
"\014\"\000\"\016smoothing\"\011mean\"\022color\"\011zero@\016"
Какой способ их убрать? Я полагаю, что мог бы сделать регулярное выражение для удаления 1 обратной косой черты из каждых последовательных n обратных наклонных черт, но у меня нет большого опыта регулярных выражений, и, похоже, должен быть «более элегантный» способ сделать это.
Например, когда я puts MyString
отображает вывод, который мне нужен, но я не знаю, как я могу записать это в переменную.
Спасибо!
Отредактировано для добавления контекста: у меня есть этот класс, который используется для маршалирования / восстановления некоторых вещей, но когда я восстанавливаю некоторые старые строки, он выдает ошибку типа, которую я определил, потому что они не были - для какая-то необъяснимая причина - сохраняется как base64. Вместо этого они, кажется, только что сбежали, чего я не хочу, потому что попытка восстановить их аналогично дает TypeError
TypeError: incompatible marshal file format (can't be read)
format version 4.8 required; 92.48 given
потому что маршал смотрит на первые символы строки, чтобы определить формат.
require 'base64'
class MarshaledStuff < ActiveRecord::Base
validates_presence_of :marshaled_obj
def contents
obj = self.marshaled_obj
return Marshal.restore(Base64.decode64(obj))
end
def contents=(newcontents)
self.marshaled_obj = Base64.encode64(Marshal.dump(newcontents))
end
end
Редактировать 2: Измененная формулировка - я думал, что они были "двойными, но только одними. Упс!