加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在Ruby中安全可逆地转义字符串引号?

发布时间:2020-12-17 02:05:31 所属栏目:百科 来源:网络整理
导读:什么是 Ruby相当于 Python string’s encode('string_escape') and decode functions? 在Python中,我可以执行以下操作: s="this isn't a "very" good example!" print sthis isn't a "very" good example! s'this isn't a "very" good example!' e=s.en
什么是 Ruby相当于 Python string’s encode('string_escape') and decode functions?

在Python中,我可以执行以下操作:

>>> s="this isn't a "very" good example!"
>>> print s
this isn't a "very" good example!
>>> s
'this isn't a "very" good example!'
>>> e=s.encode('string_escape')
>>> print e
this isn't a "very" good example!
>>> e
'this isn't a "very" good example!'
>>> d=e.decode('string_escape')
>>> print d
this isn't a "very" good example!
>>> d
'this isn't a "very" good example!'

如何在Ruby中执行等效操作?

解决方法

大概检查一下

irb(main):001:0> s="this isn't a "very" good example!"
=> "this isn't a "very" good example!"
irb(main):002:0> puts s
this isn't a "very" good example!
=> nil
irb(main):003:0> puts s.inspect
"this isn't a "very" good example!"

请注意,解码更加棘手,因为检查也会逃避utf-8文件(如二进制文件)中无效的任何内容,因此如果您知道除了有限的子集之外您将永远不会有任何内容,请使用gsub,但是,唯一真正的方法是把它转回一个字符串是解析它,从你自己的解析器或eval:

irb(main):001:0> s = "" helloxff I havenrtv lots of escapes!'"
=> "" helloxFF I havenrtv lots of escapes!'"
irb(main):002:0> puts s
" hello? I have

         lots of escapes!'
=> nil
irb(main):003:0> puts s.inspect
"" helloxFF I havenrtv lots of escapes!'"
=> nil
irb(main):004:0> puts eval(s.inspect)
" hello? I have

         lots of escapes!'
=> nil

很明显,如果你不是那个进行检查的人,那么不要使用eval,编写自己的/找到一个解析器,但是如果你是在eval之前调用inspect并且s保证是一个字符串,那么它是完全安全的( s.is_a?字符串)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读