RSS Feed条目 - Encoding :: CompatibilityError不兼容的字符编码:ASCII-8BIT和UTF-8

时间:2016-01-18 05:50:22

标签: ruby-on-rails encoding utf-8 rss rss-reader

我目前正在处理一段有效的RSS源,但现在有一个编码问题。在尝试了许多解决方案here失败之后,我推断出我可能遇到了Feed解析器的问题。

错误从索引页开始:

ActionView::Template::Error (incompatible character encodings: ASCII-8BIT and UTF-8):
11: 
12:           <div class="entry_wrapper">
13:             <div class="entry_box">
14:               <% feed.entries.each do |entry| %>
15:                 <p class="entry_title"><%= sanitize link_to entry.title, entry.url %></p>
16: 
17: 
  app/models/feed.rb:6:in `entries'
  app/views/feeds/index.html.erb:14:in `block in _app_views_feeds_index_html_erb__2672739530113604393_70126099705280'
  app/views/feeds/index.html.erb:5:in     `_app_views_feeds_index_html_erb__2672739530113604393_70126099705280'

以下是Feed#Index页面的较大部分:

<% @feeds.each do |feed| %>  # Line 5 here
      <p class="feed_url">
        <%= link_to feed.url, feed %>
        <%= link_to "Edit", edit_feed_path(feed), class: "blue" %> 
        <%= link_to "Delete", feed_path(feed), method: :delete, data: { confirm: 'Are you sure you want to delete this feed url?' }, class: "blue" %>
      </p>

      <div class="entry_wrapper">
        <div class="entry_box">
          <% feed.entries.each do |entry| %>
            <p class="entry_title"><%= sanitize link_to entry.title, entry.url %></p>

我在控制台中删除了Feed网址,因此页面呈现正常,没有任何网址可供使用。但是,只要我添加一个,我就会遇到和以前一样的错误。

我尝试在控制台中测试Feed条目的编码,并收到以下错误:

2.1.1 :001 > g = Feed.last
  Feed Load (0.1ms)  SELECT  "feeds".* FROM "feeds"   ORDER BY "feeds"."id" DESC LIMIT 1
 => #<Feed id: 9, name: nil, created_at: "2016-01-18 05:01:54", updated_at:   "2016-01-18 05:01:54", url: "http://feeds.feedburner.com/MattsTravelSite"> 
2.1.1 :002 > g.entries
Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and UTF-8
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/oga-2.0.0/lib/oga/xml/entities.rb:77:in `gsub'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/oga-2.0.0/lib/oga/xml/entities.rb:77:in `decode'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/oga-2.0.0/lib/oga/entity_decoder.rb:14:in `decode'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/oga-2.0.0/lib/oga/entity_decoder.rb:5:in `try_decode'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/oga-2.0.0/lib/oga/xml/sax_parser.rb:151:in `on_text'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/oga-2.0.0/lib/oga/xml/parser.rb:541:in `_rule_33'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/oga-2.0.0/lib/oga/xml/parser.rb:239:in `block in each_token'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/oga-2.0.0/lib/oga/xml/lexer.rb:237:in `call'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/oga-2.0.0/lib/oga/xml/lexer.rb:237:in `add_token'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/oga-2.0.0/lib/oga/xml/lexer.rb:439:in `on_element_end'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/oga-2.0.0/lib/oga/xml/lexer.rb:190:in `advance_native'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/oga-2.0.0/lib/oga/xml/lexer.rb:190:in `block in advance'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/oga-2.0.0/lib/oga/xml/lexer.rb:137:in `read_data'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/oga-2.0.0/lib/oga/xml/lexer.rb:189:in `advance'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/oga-2.0.0/lib/oga/xml/parser.rb:236:in `each_token'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/oga-2.0.0/lib/oga/xml/parser.rb:269:in `parse'
... 20 levels...
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.7/lib/active_support/dependencies.rb:241:in `load'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.7/lib/active_support/dependencies.rb:241:in `block in load'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.7/lib/active_support/dependencies.rb:232:in `load_dependency'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.7/lib/active_support/dependencies.rb:241:in `load'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/spring-1.3.6/lib/spring/commands/rails.rb:6:in `call'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/spring-1.3.6/lib/spring/command_wrapper.rb:38:in `call'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/spring-1.3.6/lib/spring/application.rb:183:in `block in serve'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/spring-1.3.6/lib/spring/application.rb:156:in `fork'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/spring-1.3.6/lib/spring/application.rb:156:in `serve'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/spring-1.3.6/lib/spring/application.rb:131:in `block in run'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/spring-1.3.6/lib/spring/application.rb:125:in `loop'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/spring-1.3.6/lib/spring/application.rb:125:in `run'
from /Users/danieluribe/.rvm/gems/ruby-2.1.1/gems/spring-1.3.6/lib/spring/application/boot.rb:18:in `<top (required)>'
from /Users/danieluribe/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /Users/danieluribe/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'

我仔细检查了W3C-Validator网站上我所提取的网站是否采用UTF-8编码:

This document was successfully checked as well-formed XML!
Result: Passed, 1 warning(s)
Address:    
http://feeds.feedburner.com/MattsTravelSite
Encoding:   utf-8   
Doctype:    XML 
Root Element:   feed
Root Namespace: http://www.w3.org/2005/Atom

我试过&#34;强迫&#34;模型中的编码,但我认为我的编码技巧在创建方法方面有点缺乏。以下是我最初为Feed#Index中使用的Feed创建的条目模型。

class Feed < ActiveRecord::Base
  has_many :items

  def entries(num = 3)
    Feedjira::Feed.add_common_feed_entry_element("img")
    feed = Feedjira::Feed.fetch_and_parse(url)
    feed.entries.take(num)

    # add_items(feed.entries)  # Saving items to database
  end
....

由于此模型之前有效,我不确定发生了什么。我确实从应用程序中花了几个月的时间,所以我不知道Feedjirra是否有任何改变。任何帮助将不胜感激。

0 个答案:

没有答案