2014-09-10 43 views
1

我有一個字符串變量的內容如下:如何刪除Ruby中字符串中的垃圾郵件?

str = "abc�" 

如何檢查並刪除字符串是否有這樣的「」符號或者不Ruby on Rails的?

+1

好吧,天知道... – apneadiving 2014-09-10 10:00:18

+0

不知道紅寶石,你可以嘗試用空的替換所有''[^ \ x00- \ x7F]'嗎?它達到了你的目標嗎? – Kent 2014-09-10 10:00:29

+0

@apneadiving連上帝都不知道,這就是他爲什麼要問這裏的原因。 :-) – Kent 2014-09-10 10:01:33

回答

0

(1)你得到的,當你有

str.inspect

顯示? (2)如果你知道,你的字符串允許的字符範圍是什麼,你可以反過來替換任何不在這個範圍內的字符。

2

字符「 」是U+FFFD REPLACEMENT CHARACTER in Unicode。如果字符串字面包含的字符,然後刪除它是那樣簡單:

cleaned_string = str.gsub "�", '' 

或(假設你想避免在您鍵入代碼字符「」):

cleaned_string = str.gsub "\ufffd", '' 

維基說這個關於這個字符:

它被用來表示系統無法將數據流渲染到正確的符號時的問題。

所以很可能你真正的問題是你沒有正確處理這個字符串的來源 - 很可能這是一個編碼問題。例如,如果字符串最初是abcé,但是採用ISO-8859-1編碼,但某些系統將其解釋爲UTF-8,那麼最終字符é將無效,該系統可能會將其顯示爲「 」 ,這是你的程序看到的。 (維基百科頁面有另一個例子。)

如果這是一個編碼問題,那麼根據這些數據來自何處可能爲時過晚對於你做任何事情,真正的數據可能已經丟失,最好的你可以做的是去掉這些字符(或者你可能更願意留下它們來指出哪裏出現問題)。否則,在將數據讀入程序時需要小心,將其讀取爲適當的編碼,以免數據丟失。

如果字符編碼對您來說完全是新的,那麼開始瞭解它們的好地方是Joel Spolsky的文章The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)