5

我有一些奇怪的字符出现在破坏脚本的字符串中。据我所知,put badstring他们是"\0\0\0\0"

我想对此进行测试,以便可以忽略它们……但是如何?

以为那是什么blank?empty?是为了什么?!?:

> badstring = "\0"
 => "\u0000" 
> badstring.blank?
NoMethodError: undefined method `blank?' for "\u0000":String
    from (irb):97
    from /Users/meltemi/.rvm/rubies/ruby-2.0.0-p195/bin/irb:16:in `<main>'
> badstring.empty?
 => false
> badstring.nil?
 => false 

编辑:试图在 irb 中重新创建它但遇到了麻烦:

> test1 = "\0\0\0\0"
 => "\u0000\u0000\u0000\u0000" 
> test2 = '\0\0\0\0'
 => "\\0\\0\\0\\0"

我想要的是一个"\0\0\0\0"字符串,这样我就可以找到一种测试方法if mystring == "\0\0\0\0"或类似的东西。

4

3 回答 3

4

首先blank?是一个 Rails 助手。试试这个:

badstring =~ /\x00/ 

如果返回一个整数,那么给定的字符串包括"\0",如果返回,nil那么给定的字符串不包括"\0"

于 2013-05-20T15:50:35.383 回答
3

似乎我们需要在这里验证编码和字符。您可以使用 . 检查字符串的编码类型"string".encoding。然后你可以看到这里实际使用了哪些字符代码badstring.chars.map(&:ord)。然后您可以使用替换/删除字符character_code.chr(encoding)

于 2013-05-21T03:23:34.853 回答
3

你可以删除"\0"字符

badstring.delete!("\0")

完整示例

badstring = "\0"
badstring.delete!("\0")
badstring.empty?
#=> true

如果您想保留原始字符串,请使用delete而不是。delete!

于 2013-05-20T15:48:09.287 回答