実行時に 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