我想解析我的rails應用程序中的rss/atom-feeds,但我遇到了一些非ASCII字符的嚴重問題,例如。德國變音符號ÄÖÜ或ß。野外的一些飼料使用正確的UTF-8,但其他一些飼料讓我哭泣。一般問題是:飼料編碼問題Ruby 1.9
我必須能夠解析任何提要,無論他們可能有什麼編碼。字符的「損失」不是一個選項(儘管它是我目前的狀態),因爲我對feed-items做了一些文本和語言分析。
我使用至今:
- FeedZirra用於獲取和解析飼料,效果很好至今。我也「清理」從FeedZirra獲得的價值。
- ヶ輛(GEM),用於進行反向轉義特殊字符,如
"Ä"
這意味着 「A」 - rCharDet19寶石,找出哪些編碼飼料可能有,並且:
- string.encode!從不管它是UTF-8
- 的Ruby 1.9.3(最新的)和Rails 3.2.8在Ubuntu Linux 12.04
的問題是轉換,那我真的不知道我在做什麼錯誤。
def self.sanitize_encoding_and_htmlentities str
cd = CharDet.detect str
s = str.encode(:invalid => :replace, :undef => :replace, :replace => '')
coder = HTMLEntities.new
coder.decode(s)
end
這是我目前的衛生方法。作爲樣品進我使用
http://www.N24.de/2/index.rss
到目前爲止,「特」字得到了徹底更換。這是我發現的唯一變體,它只是在沒有因無效字節的原因而引發錯誤的情況下工作。我稍微改變了編碼方法,因爲我在ruby文件中讀到沒有給出任何編碼,編碼方法應該「翻譯」到應用程序的給定default_internal編碼,在我的例子中是utf-8。 CharDet站在那裏只是爲了可能的改變任何相關的,可能是有用的。
我使用了magic_encoding gem,因此我項目中的每個文件都應該在第一行有註釋。我的數據庫是utf-8的sqlite3。
截至2012年,有什麼我應該看看?我做錯了什麼嗎?
感謝您的幫助!
編輯: 飼料可能是rss的任何種類,原子,和/或只是無效的XML。 Encoding可能是UTF-8,有些不同,或者只是說「utf-8」,而它的一些windows-XXX的東西,等等。我真的需要一個解決方案。
也提取/解析必須儘可能快,這就是爲什麼我選擇feedzirra。
我目前的想法是獲取feedcontent,如果可能的話用htmlentities替換「title」和「description」節點中的每個字符,使用encode!方法切換到utf-8,然後使用這些特性。在此之後,我認爲應該保留特殊字符,但目前我無法得到像這樣的工作。可能這是一個好方法?