【发布时间】: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 <filename>从文件系统中获取 4 字节创建者代码。通常我会收到一个字母数字响应,但有些文件返回\0\0\0\0不管那是什么?!?