Ruby Nokogiri-XML编码问题

Ruby Nokogiri-XML编码问题,ruby,xml,character-encoding,nokogiri,Ruby,Xml,Character Encoding,Nokogiri,我编写了一个简单的Ruby脚本,与Google搜索的建议API进行对话 通过更改“query”变量,您可以定义询问API的内容。英语很好用,但德语umlauts似乎会导致一些编码问题。在下面的示例中,我使用了单词“Tür”(门)来演示这个问题 #!/usr/bin/env ruby # encoding: UTF-8 require 'nokogiri' require 'open-uri' query = 'Tür' uri = URI.encode("http://suggestquer

我编写了一个简单的Ruby脚本,与Google搜索的建议API进行对话

通过更改“query”变量,您可以定义询问API的内容。英语很好用,但德语umlauts似乎会导致一些编码问题。在下面的示例中,我使用了单词“Tür”(门)来演示这个问题

#!/usr/bin/env ruby
# encoding: UTF-8

require 'nokogiri'
require 'open-uri'

query = 'Tür'
uri = URI.encode("http://suggestqueries.google.com/complete/search?output=toolbar&hl=de&q=#{query}")
puts uri
puts '----------'

xml_doc = Nokogiri::XML(open(uri)) 
puts xml_doc
puts '----------'

xml_doc.xpath('.//suggestion').each do |suggestion| 
  puts suggestion.attr('data')
end
输出:

http://suggestqueries.google.com/complete/search?output=toolbar&hl=de&q=T%C3%BCr
----------
element suggestion: output error : invalid character value
<?xml version="1.0"?>
<toplevel>
  <CompleteSuggestion>
    <suggestion data="t&#xFC;rkei"/>
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="t?rkis"/>
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="t?rkei news"/>
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="t?rkiye"/>
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="t?ren"/>
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="t?rstopper"/>
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="t?rschloss"/>
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="t?rkisch deutsch"/>
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="t?renheld"/>
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="t?rkisch"/>
  </CompleteSuggestion>
</toplevel>
----------
t?rkei
t?rkis
t?rkei news
t?rkiye
t?ren
t?rstopper
t?rschloss
t?rkisch deutsch
t?renheld
t?rkisch
http://suggestqueries.google.com/complete/search?output=toolbar&hl=de&q=T%C3%BCr
----------
元素建议:输出错误:无效字符值
----------
特尔基
托尔基斯
特尔凯新闻
特尔基耶
托伦
托普
t?rschloss
德国特尔基什
蒂伦霍尔德
特尔基什
正如您所看到的,uri是有效的,API返回XML数据。但是打印的数据已经有了这些编码错误,我怀疑Nokogiri配置错误,因为它在Chrome中工作得很好。它还说:

元素建议:输出错误:无效字符值

有人知道如何解决这个问题吗?那太好了

试试这个:

xml_doc = open(url) { |io| Nokogiri::XML(io.read.encode('UTF-8')) }
试试这个:

xml_doc = open(url) { |io| Nokogiri::XML(io.read.encode('UTF-8')) }
看看是否有帮助。我发现用例子做最好的解释。如果有帮助,我发现用例子做最好的解释