输入不正确UTF-8,表示在轨道上编码

时间:2017-09-04 10:06:09

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

我想知道如何修复此错误:

Input is not proper UTF-8, indicate encoding

位于: http://xml.skiddlecdn.co.uk/affiliates/all.xml

使用的代码如下所示:

skiddlexml = 'http://xml.skiddlecdn.co.uk/affiliates/all.xml'
doc = Nokogiri::XML(open(skiddlexml))

@ticket_json = []
doc.css('event#' + params[:id]).css('ticket').each do |node|
  children = node.children
  @ticket_json << {
    'name' => children.css('name').inner_text,
    'faceValue' => children.css('faceValue').inner_text,
    'bookingFee' => children.css('bookingFee').inner_text,
    'quantity' => children.css('quantity').inner_text,
    'status' => children.css('status').inner_text
  }
end

doc.css('event#' + params[:id]).each do |node|
  @skiddle_url = node['link'].chomp('?sktag=XXX') + '?sktag=13942'
end
respond_to do |format|
   format.json  { render :json => {:tickets => @ticket_json, :skiddle_url => @skiddle_url } }
end

我想知道是否有解码方法并重新编码,以便代码仍然相同?

萨姆

修改

正如您在事件控制器中看到的,它当前使用params id来搜索XML文件,

如果我们接受了身份12987613,则无法对其进行罚款,但是sublime会显示在137631行显示的ID

1 个答案:

答案 0 :(得分:0)

嗯,最初的问题是XML文件无论如何都是错误的,所以理想情况下你应该让他们修复文件。

e.g。 tryiong在Chrome中显示会出错:

  

此页面包含以下错误:

     第27行第56849行的

错误:输入不正确UTF-8,表示编码!   字节:0x1E 0x63 0x20 0x61

     

下面是第一个错误的页面呈现。

但是XML文件声称是UTF-8:

<?xml version="1.0" encoding="UTF-8"?>

然而,Nokogiri实际上可以默认加载它(没有准确调查那些无效字节会发生什么),因为它的默认模式是恢复(参见http://www.nokogiri.org/tutorials/parsing_an_html_xml_document.html

  

RECOVER - 尝试从错误中恢复。建议用于解析格式错误或无效的文档。 默认情况下已设置!

但同样是由于XML文档本身而报告错误。

doc.errors
[#<Nokogiri::XML::SyntaxError: 56849:123: FATAL: CData section not finished
A unique  and rare opportunity to experience, the >,
#<Nokogiri::XML::SyntaxError: 56849:123: FATAL: PCDATA invalid Char value 30>,
#<Nokogiri::XML::SyntaxError: 56849:158: FATAL: Sequence ']]>' not allowed in content>,
#<Nokogiri::XML::SyntaxError: 56849:158: FATAL: Sequence ']]>' not allowed in content>,
#<Nokogiri::XML::SyntaxError: 56849:158: FATAL: internal error: detected an error in element content

您可以加载然后再次保存文件,但至少您可能会丢失一些被抱怨的数据。最好修复创建该文件的任何内容,或者如果有人手动完成,手动检查这些语法错误的位置,看看您是否可以确定预期的内容并更正它们。