0

私はコードのブロックを持っています:

temp = "Cancel"
puts CGI::escape(words[1])
puts "\n"
puts CGI::escape(temp)
puts "\n"
puts words[1]
puts "\n"
puts temp
puts "\n"

私の出力は次のとおりです。

%00C%00a%00n%00c%00e%00l%00

Cancel

Cancel

Cancel

ここでの問題は、words 配列の設定方法にあると考えるのが妥当だと思います。しかし、これが解決策を持つ一般的な動作であるかどうか疑問に思っていましたか? そうでない場合、これを引き起こす原因は何ですか?

私の単語配列は、ファイルからデータを読み取り、各行を分割して必要な情報を抽出することによって設定されるため、それほど複雑ではありません。

4

1 に答える 1

3

文字列に NUL バイトがあります。putsそれらを無視するだけです。

1.9.2p290 :016 > puts "Fo\0oooo"
Fooooo
 => nil

inspect を使用すると、それらを見ることができます:

1.9.2p290 :017 > puts "Fo\0oooo".inspect
"Fo\u0000oooo"
 => nil 

そしてここでの出力CGI::escape

1.9.2p290 :018 > puts CGI::escape("Fooo\0ooo")
Fooo%00ooo
 => nil

編集:

迅速で汚い解決策は、それらを削除することです。

"Fooooo\0ooo".gsub(/\0/, "")
 => "Foooooooo"

ただし、すべての文字の前に NUL バイトがあるため、ファイルを読み取るためにコードを確認する必要があります。コードを提供していただければ、解決策を考え出すのがより簡単になります。

于 2012-08-30T23:40:32.920 に答える