2012-08-29 45 views
0

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

回答

0

终于让我找到的主要问题:

Feedzirra已经返回UTF-8访问时条目及其属性。但我使用sanitize方法来访问属性,它返回ASCII-8BIT和奇怪的字符作为html实体转义。

但是,我踢了所有的消毒和编码的东西,我的代码,现在它只是工作。似乎FeedZirra有一些内置的代码转换饲料,如果必要的话。