2012-09-28 50 views
1

我有以下的代碼分析與引入nokogiri HTML文檔:更改UTF-8空間,以正則表達式,能空間

td.next_element.text.scan(/\A[^(]+/).first.gsub(/\s+/, " ").strip 

還有一個case聲明與具有\s+,而不是一個正則表達式捕捉任何東西。我試圖使用strip,但它沒有做任何事情。

經過上述gsub行的測試後,我發現在編碼空白的方式上存在問題。 td.next_element.text[-2].ord返回的結果不是我所預期的那樣,而是160.但是我意識到我的文檔是UTF-8格式的,而不是ASCII格式的,而且160是一個非破壞性的空間。

我應該能夠做到這一點,我想:

case td.text.strip.downcase.gsub(/\xA0|\xC2/, ' ') 

問題是,我得到

Encoding::CompatibilityError 
    (incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string)): 

我該怎麼辦?此外,不是正則表達式應該匹配所有的空白,而不僅僅是ASCII?

+0

您需要做的是設置輸入數據的字符編碼。我不是Ruby程序員,所以我不知道具體情況,但應該有一些庫。我找到了相關的文章:http://yehudakatz.com/2010/05/05/ruby-1-9-encodings-a-primer-and-the-solution-for-rails/ – dan1111

回答

4

添加評論#encoding: UTF-8作爲腳本的第一行;使用/[[:space:]]/來查找Unicode空格。