2013-05-20 62 views
4

我有一些奇怪的字符出現在打破腳本的字符串中。從我所知道的put badstring到控制檯,他們是"\0\0\0\0"Ruby測試「 0」null?

我想測試這個,所以我可以忽略它們......但是如何?

認爲這是什麼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"或類似的東西。

+0

也許你的字符串不像你所假設的那樣是ASCII,而且實際上就像UTF-16或UTF-32,我們期望它有多個零字節。我建議首先排除這種可能性,也許讓Ruby轉換字符串,然後再嘗試一個劈柴工作並切斷字符串,可能使其他字符難以辨認。 –

+0

你將被歸類爲壞串的字符串是什麼?因此我們會考慮。 –

+0

有沒有更好的方法來確定它是什麼樣的「字符串」?甚至可能是一些空字符?我只知道'puts'返回'「\ 0 \ 0 \ 0 \ 0」' – Meltemi

回答

3

,如果你想保持原來的串繞你可以只取出"\0"字符與

badstring.delete!("\0") 

完整的示例

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

使用delete,而不是delete!

3

首先blank?是一個Rails幫手。試試這個:

badstring =~ /\x00/ 

如果返回一個整數,然後給定字符串包括"\0",如果返回nil然後給定的字符串不包括"\0"

2

好像我們需要在這裏驗證編碼和字符。您可以使用「string」.encoding來檢查字符串的編碼類型。然後你可以看到這裏使用的字符代碼是badstring.chars.map(&:ord)。然後你可以使用character_code.chr(編碼)替換/刪除字符。