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

通过检查,您可以看到它们:

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 回答