我有一个 .rb 文件,它在运行时接受 UTF-8 的字符串输入,但由于某种原因,输入会自动修改。这是我的代码的示例:
# encoding :UTF-8
.
.
.
print "Enter a UTF-8 input: "
text = gets.chomp
p text
所以,如果我输入“\n\u001C\u0018\t\u001C”,它会打印出“\\n\\u001C\\u0018\\t\\u001C”,这不是我输入的!虽然我很好奇,但我比较了长度,它是相同的 22。但是,我知道它已被修改,因为当我通过同一文件中的函数运行文本时,它会将其读取为第二个。我知道这一点是因为当我通过 irb 运行我的实际代码时,它按预期工作,但是当我从文件中运行它时,它并没有做我想要的。
编辑:肖恩回答了我关于打印的问题,但它没有解释为什么当我将文本中的值用于同一个 ruby 文件中的函数时,它没有看到它应有的内容。换句话说,当我物理输入 UTF 字符串时,该函数在 irb 上完美运行。所以,如果我在下面的函数中输入“\t\u001C\u001C”.xor “key”,结果应该是“bye”。再一次,这在 irb 中有效,但是当我从文件中运行它时它不起作用!当我从文件运行它时,当我从 irb 运行它时没有收到任何错误时,它给了我一个“'*':否定参数 (ArgumentError)”!下面是函数:
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