2011-10-12 75 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