【问题标题】:convert xml to utf-8 encoding将 xml 转换为 utf-8 编码
【发布时间】:2014-02-02 18:19:43
【问题描述】:

我有一个以

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

当我尝试这样做时

Hash.from_xml(my_xml)

我收到了#&lt;REXML::ParseException: No close tag for /root/response/message&gt; (REXML::ParseException)

在消息标签中确实有上述编码中的字符。我需要解析那个 XML,所以我猜我需要将它全部转换为 utf-8 或其他解析会喜欢的东西。

有没有办法做到这一点? (其他用途,如 Nokogiri 也不错)

【问题讨论】:

    标签: ruby xml encoding


    【解决方案1】:

    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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-30
      • 2011-06-26
      • 2015-09-19
      • 2012-01-15
      • 2014-06-22
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多