エスケープせずに保存したい特別なエスケープコードを含む文字列がたくさんあります。たとえば、インタプリタは次のように表示します。
"\\014\"\\000\"\\016smoothing\"\\011mean\"\\022color\"\\011zero@\\016"
しかし、私はそれを(検査したときに)次のように表示したい
"\014\"\000\"\016smoothing\"\011mean\"\022color\"\011zero@\016"
それらをエスケープ解除する方法は何ですか?連続するn個のバックスラッシュごとに1つのバックスラッシュを削除する正規表現を作成できると思いますが、正規表現の経験はあまりなく、「よりエレガントな」方法があるはずです。
たとえば、puts MyString
必要な出力が表示されますが、それを変数にキャプチャする方法がわかりません。
ありがとう!
コンテキストを追加するために編集:いくつかのものをマーシャリング/復元するために使用されているこのクラスがありますが、いくつかの古い文字列を復元すると、タイプエラーが発生します。 --base64として保存されます。TypeError: incompatible marshal file format (can't be read)
format version 4.8 required; 92.48 given
代わりに、それらはエスケープされたように見えますが、これは望ましくありません。マーシャルが文字列の最初の文字を調べて形式を決定するため、同様に復元しようとするとTypeErrorが発生
するためです。
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:言い回しを変更-「ダブルエスケープ」だと思っていましたが、シングルエスケープしかありませんでした。おっと!