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