【发布时间】:2010-04-08 18:36:37
【问题描述】:
我有一堆带有特殊转义码的字符串,我想不转义地存储 - 例如,解释器显示
"\\014\"\\000\"\\016smoothing\"\\011mean\"\\022color\"\\011zero@\\016"
但我希望它(在检查时)显示为
"\014\"\000\"\016smoothing\"\011mean\"\022color\"\011zero@\016"
解除转义的方法是什么?我想我可以制作一个正则表达式来从每个连续的 n 个反斜杠中删除 1 个反斜杠,但我没有很多正则表达式经验,似乎应该有一种“更优雅”的方式来做到这一点。
例如,当我puts MyString 时,它会显示我想要的输出,但我不知道如何将其捕获到变量中。
谢谢!
编辑添加上下文:我有这个类用于编组/恢复一些东西,但是当我恢复一些旧字符串时,它会吐出一个类型错误,我确定这是因为它们不是 - 因为一些莫名其妙的原因——存储为base64。相反,它们似乎刚刚被转义,这是我不想要的,因为尝试恢复它们同样会产生 TypeError
TypeError: incompatible marshal file format (can't be read)
format version 4.8 required; 92.48 given
因为 Marshal 会查看字符串的第一个字符来确定格式。
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:更改了措辞——我以为它们是“双重转义的”,但它只是单一转义的。哎呀!
【问题讨论】:
标签: ruby string escaping backslash