我有一个.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