我想解析我的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,然后使用这些特性。在此之后,我认为应该保留特殊字符,但目前我无法得到像这样的工作。可能这是一个好方法?