0

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

1 回答 1

2

发生这种情况的原因是因为您正在使用:

p text

对比

puts text

当您使用 p 时,ruby 输出以下结果:

puts text.inspect

这将向您显示其中被用作转义字符的额外 \。如果您只是使用 puts,您将看到预期的结果!

干杯!

于 2012-04-20T15:26:26.363 回答