2012-04-20 51 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