我從遠程站點拉取文本並嘗試將其加載到默認情況下使用utf-8的Ruby 1.9/Rails 3應用程序中。將非ASCII字符從ASCII-8BIT轉換爲UTF-8
下面是一些違規文本的例子:
Cancer Res; 71(3); 1-11. ©2011 AACR.\n
,版權代碼擴展這個樣子的:
Cancer Res; 71(3); 1-11. \xC2\xA92011 AACR.\n
紅寶石告訴我該字符串編碼爲ASCII-8BIT和餵養到我Rails應用程序讓我這個:
incompatible character encodings: ASCII-8BIT and UTF-8
我可以使用此re去掉版權代碼GEX
str.gsub(/[\x00-\x7F]/n,'?')
產生這種
Cancer Res; 71(3); 1-11. ??2011 AACR.\n
但我怎麼能得到一個版權符號(以及各種其他符號,如希臘字母)轉換成UTF-8相同的符號?當然,它是可能的...
我看到使用force_encoding引用,但這不起作用:
str.force_encoding('utf-8').encode
我知道有很多人有類似的問題,但我還沒有看到一個解決方案,作品。
你是如何從遠端站點拉文本的?刮頁面?請顯示一些示例代碼,包括您正在使用的HTTP客戶端,以及是否使用Nokogiri,Hpricot或ReXML解析頁面。這個問題可能是你如何檢索頁面和/或你如何解析頁面的結果。一旦我們知道您以數據安全的方式提取內容,我們可以幫助您在代碼集之間轉換數據。 – 2011-02-01 21:15:01
真正簡單的代碼 - open-uri和nokogiri - 例如doc = Nokogiri :: XML(open(url))然後doc.css(...).text將文本的相關塊取出 – 2011-02-01 21:39:16
請顯示示例代碼。您正在檢索HTML或XML文件嗎?解析時,Nokogiri確實在意分歧。另外,請提供一些網址,因爲互聯網上的每個網站都是不同的。 – 2011-02-01 23:57:59