2011-10-12 74 views
3

假设我们有字符串'\342\200\231'(与"\\342\\200\\231"相同)。什么是将此字符串转换为"\342\200\231"(与 Unicode字符相同)的快速方法?如何在Ruby中转换字符串

+1

那么,你想将任何前导和尾随的单引号转换为双引号?或者所有的单引号加双引号? –

+0

是实际字符串的'''部分吗?或者你是否试图将单引号字符串转换为双引号字符串(除了双引号字符串之外,它们都是相同的,允许插值等更多内容)? – birryree

+0

不,报价不是字符串的一部分。如果你将两个字符串粘贴到irb中,你可以知道我需要什么。 – taro

回答

3

建议:

s.gsub(/\\(\d{3})/) { $1.oct.chr } 

这取决于你可以让你输入什么假设。

+0

+1这比我的回答要好得多。 –

+0

谢谢,这比eval解决方案更安全。 – taro

1

您似乎在问的是如何将12个字符的字符串更改为三个字符的字符串。

'\342\200\231' 

是12个字符长。

"\342\200\231" 

是三个字符长;实际上是三个字节,但在Ruby 1.8中,它大致相同,因为字符串总是字节序列。

这里是一个EVIL回答你(你是说快),它的eval优势,做你的“分析”:

irb(main):017:0> s = '\342\200\231' 
=> "\\342\\200\\231" 
irb(main):018:0> t = eval('"' + s + '"') 
=> "\342\200\231" 
irb(main):019:0> s.length 
=> 12 
irb(main):020:0> t.length 
=> 3 

对不起,EVAL!

我应该给一个更有帮助的答案... 编辑:别人做了。

+0

谢谢!不喜欢评估,但这是很好的解决方案。 – taro