【问题标题】:Ruby test for "\0" null?“\ 0”空的Ruby测试?
【发布时间】:2013-05-15 05:07:58
【问题描述】:

我有一些奇怪的字符出现在破坏脚本的字符串中。从我可以通过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" 或类似的东西。

【问题讨论】:

  • 也许你的字符串不像你假设的那样是 ASCII,实际上是像 UTF-16 或 UTF-32,我们希望有多个零字节。我建议先排除这种可能性,也许让 Ruby 转换字符串,然后再尝试斧头工作并切碎字符串,可能会使其他字符无法辨认。
  • 您将哪些字符串归类为坏字符串?我们会相应地思考。
  • 有没有更好的方法来识别它是什么类型的“字符串”?甚至可能是一些空字符?我只知道puts 返回"\0\0\0\0"
  • 你在哪里得到字符串?一份文件?一个网页?文件只有四个字节长吗?
  • 这是来自 Mac OS (Classic) 文件的创建者代码。我需要将数千个古代(~1980 年代)文件转换成更现代的格式。在 Mac OS X 上使用 GetFileInfo -c &lt;filename&gt; 从文件系统中获取 4 字节创建者代码。通常我会收到一个字母数字响应,但有些文件返回 \0\0\0\0 不管那是什么?!?

标签: ruby null string


【解决方案1】:

您可以删除"\0" 字符

badstring.delete!("\0")

完整示例

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

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

【讨论】:

    【解决方案2】:

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

    badstring =~ /\x00/ 
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-04
        • 1970-01-01
        相关资源
        最近更新 更多