0

実行時に UTF-8 の文字列入力を受け取る .rb ファイルがありますが、何らかの理由で入力が自動的に変更されます。これは私のコードがどのように見えるかの例です:

# 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 でした。しかし、同じファイル内の関数を介してテキストを実行すると、2 番目のものとして読み取られるため、変更されていることがわかります。これは、実際のコードを irb で実行すると意図したとおりに動作するのに、ファイルから実行すると意図したとおりに動作しないためです。

編集:ショーンは、印刷に関する質問に答えましたが、同じルビファイル内の関数にテキストで値を使用すると、それが正しく表示されない理由が説明されていません。つまり、UTF 文字列を物理的に入力すると、関数は irb で完全に機能します。なので、下の関数に「\t\u001C\u001C」.xor「キー」を入力すると、結果は「bye」になるはずです。繰り返しますが、これは 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
4

1 に答える 1

2

これが発生する理由は、次のものを使用しているためです。

p text

puts text

p を使用すると、ruby は次の結果を出力します。

puts text.inspect

エスケープ文字として使用されている余分な \ が表示されます。puts を使用した場合は、期待どおりの結果が得られます。

乾杯!

于 2012-04-20T15:26:26.363 に答える