我有一個.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
您的代碼導致「未知編碼名稱:TF-8(ArgumentError) 」這裏(1..9.3)。試試:'#encoding:UTF-8'。 – steenslag 2012-04-20 13:53:17
我編輯了原帖。請看看編輯,所以你確切知道我有什麼問題。謝謝! – m10zart 2012-04-26 05:01:26
看看這個問題,它似乎有你需要的第二部分: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