2011-07-08 56 views
1

我使用Ruby打開URL並閱讀其內容。我正在閱讀的文件的內容類型是'text/plain'。從open(url)清除內容.read

問題是這包含一些我想逃避的字符。例如,在純文本中出現的字符之一是「\ 240」,這是連字符的ASCII碼。

我很好奇這是如何產生的,因爲我在文本中的任何地方都看不到連字符。然而,它無形中存在,當我使用puts在控制檯中打印文本時會出現「\ 240」。

其次,我該如何逃避怪異角色的這種情況?理想情況下,我想要轉義所有形式爲「\ [某些數字]」的字符。我正在使用

"\240".gsub(Regexp.new("\\\d+"),"") 

但它似乎沒有工作。

是否有更多的傳統方式來清除打開URL中的純文本內容?

+0

連字符不是「\ 240」。連字符是一個較低的ASCII字符,'45.chr#=>「 - 」'。您正在看到高位字符。 –

+0

你如何打開網址?顯示網址和一些示例代碼。 Net :: HTTP和Open :: URI讓你看看內容編碼,看看服務器認爲文件是什麼字符集。問題是服務器可能是錯的,但這是你的出發點。您可以執行一個'HEAD'請求來查找編碼,然後告訴Ruby在您收到實際正文時使用該編碼。這應該有助於避免被誤解的字符。 –

回答

1

有這個戲之後,我發現下面的正則表達式,不會把戲對我來說:

str.gsub(/[^\x00-\x7F]/,'') 
+0

我使用的是Ruby 1.8.7,效果很好! – deruse

2

您可能要檢查的字符集是越來越返回的文本。它可能是UTF-8,它經常具有很高的字符。 Ruby 1.9對字符集和它們之間的切換有很好的支持。我用str.encode("US-ASCII", :invalid => :replace, :undef => :replace, :replace => "?")強制字符串轉換爲標準ASCII,用?替換任何奇數字符。

+0

我喜歡這個答案,並計劃在遷移到Ruby 1.9後使用這種方法。謝謝! – deruse