将xml转换为utf-8编码

时间:2014-01-14 15:52:11

标签: ruby xml encoding

我有一个以

开头的xml
<?xml version='1.0' encoding='ISO-8859-8'?>

当我尝试

Hash.from_xml(my_xml)

我得到#<REXML::ParseException: No close tag for /root/response/message> (REXML::ParseException)

消息标记中的

确实存在上述编码中的字符。我需要解析那个XML,所以我猜我需要将它全部转换为utf-8或者解析所需的其他东西。

有办法做到这一点吗? (与Nokogiri一样的其他用途也很好)

1 个答案:

答案 0 :(得分:2)

Nokogiri似乎做对了:

# test.xml
<?xml version='1.0' encoding='ISO-8859-8'?>
<what>
  <body>דה</body>
</what>

xml = Nokogiri::XML(File.read 'test.xml')
puts xml.at_xpath('//body').content
# => "דה"

你也可以告诉Nokogiri使用什么编码(例如Nokogiri::XML(File.read('test.xml'), nil, 'ISO-8859-8')),但这里似乎没有必要。

如果这没有帮助,您可能需要检查XML是否格式正确。

如果您愿意,可以将XML转换为UTF-8:

xml2 = xml.serialize(:encoding => 'UTF-8') {|c| c.format.as_xml }

如果您只想将Nokogiri XML转换为哈希值,请在此处查看一些解决方案:Convert a Nokogiri document to a Ruby Hash,或者您可以执行:Hash.from_xml(xml2)