2012-04-20 48 views
0

我有一個.rb文件,運行時需要UTF-8的字符串輸入,但由於某些原因輸入被自動修改。這裏是我的代碼看起來像一個例子:Ruby:UTF-8不正確的輸入

# encoding :UTF-8 
. 
. 
. 
print "Enter a UTF-8 input: " 
text = gets.chomp 
p text 

所以,如果我輸入 「\ n \ u001C \ u0018 \ t \ u001C」,它打印出「\\ \\ñ\\ u001C u0018 \ \ t \\ u001C「這不是我輸入的內容! 好奇的是,我比較了長度,它是相同的。但是,我知道它被修改,因爲當我通過同一個文件中的函數運行文本時,它會將其作爲第二個文件讀取。我知道這是因爲當我通過irb運行我的實際代碼時,它按預期運行,但是當我從文件運行它時,它不會按照我的要求運行。

編輯:肖恩回答我有關打印的問題,但它並不能解釋爲什麼當我在文本中使用的值的函數相同紅寶石文件中,它不會看到它,因爲它應該。換句話說,當我物理輸入UTF字符串時,該函數對irb完美工作。所以,如果我在下面的函數中輸入「\ t \ u001C \ u001C」.x或「key」,結果應該是「再見」。 再一次,這在irb中有效,但是當我從一個文件運行它時它不起作用!當我從文件運行它時,它會給我一個「'*':否定參數(ArgumentError)」,當我沒有從irb運行它時出現任何錯誤!下面是函數:

class String 
    def xor(key) 
    text = dup 
    b1 = text.unpack("U*") 
    b2 = key.unpack("U*") 
    longest = key.length #[b1.length,b2.length].max 
    b1 = [0]*(longest-b1.length) + b1 
    b2 = [0]*(longest-b2.length) + b2 
    result = b1.zip(b2).map{ |a,b| a^b } 
    result.pack("U*") 
    end 
end 
+0

您的代碼導致「未知編碼名稱:TF-8(ArgumentError) 」這裏(1..9.3)。試試:'#encoding:UTF-8'。 – steenslag 2012-04-20 13:53:17

+0

我編輯了原帖。請看看編輯,所以你確切知道我有什麼問題。謝謝! – m10zart 2012-04-26 05:01:26

+0

看看這個問題,它似乎有你需要的第二部分:http://stackoverflow.com/questions/7015778/is-this-the-best-way-to-unescape-unicode-escape-序列在紅寶石這一個太http://stackoverflow.com/questions/9230663/ruby-unescape-unicode-string – Sean 2012-04-26 14:53:43

回答

2

出現這種情況的原因是因爲你使用:

p text 

VS

puts text 

當您使用P,紅寶石輸出的結果:

puts text.inspect 

哪個會sho你在那裏的額外\'在那裏被用作轉義字符。如果你只是使用放置,你會看到預期的結果!

乾杯!

+0

謝謝你的回答。這有助於回答我的第一個問題,但不幸的是我沒有回答我的其他問題。請看我編輯的問題!再一次,謝謝! – m10zart 2012-04-26 05:00:30