String#dump
String#dumpメソッドは文字をエスケープしてくれます。irbを使ってdumpとevalに戯れてみました。
irb(main):001:0> s = "print \"Ruby!\"\n" => "print \"Ruby!\"\n" irb(main):002:0> eval s Ruby!=> nil irb(main):003:0> p s "print \"Ruby!\"\n" => nil irb(main):004:0> print s print "Ruby!" => nil irb(main):005:0> s.dump => "\"print \\\"Ruby!\\\"\\n\"" irb(main):006:0> eval(s.dump) => "print \"Ruby!\"\n" irb(main):007:0> s.dump.dump => "\"\\\"print \\\\\\\"Ruby!\\\\\\\"\\\\n\\\"\"" irb(main):008:0> s.dump.dump.dump => "\"\\\"\\\\\\\"print \\\\\\\\\\\\\\\"Ruby!\\\\\\\\\\\\\\\"\\\\\\\\n\\\\\\\"\\\"\"" irb(main):009:0> eval(eval(eval(s.dump.dump.dump))) => "print \"Ruby!\"\n" irb(main):010:0> eval(eval(eval(eval(s.dump.dump.dump)))) Ruby!=> nil