如何忽略LibXML中错误编码导致的解析错误?

时间:2014-08-28 13:48:01

标签: xml perl parsing encoding utf-8

我必须解析没有标记正确编码的XML(在XML::LibXML中)。具体来说,它包含德语ü变音符号(可能还有其他符号),但没有<?xml version="1.0" encoding="iso-8859-1" ?>等。当我尝试使用此行解析LibXML:

my $smDOM = $PRSR->load_xml(location => $smfile, no_blanks => 1)

我收到错误parser error : Input is not proper UTF-8, indicate encoding !

我也尝试了

my $smDOM = $PRSR->load_xml(location => $smfile, no_blanks => 1, encoding=> "iso-8859-1");

导致相同的错误。

  • 有没有办法禁用UTF-8作为默认编码?
  • 或者在解析时忽略编码错误?
  • 或者在调用或创建解析器时指定不同的编码?
  • 顺便说一句,我不明白为什么一个简单的德国变音符号不适合UTF-8?

1 个答案:

答案 0 :(得分:4)

你所拥有的不是XML或HTML,XML :: LibXML支持的两种格式。

encoding参数严格用于名称匹配/html/的函数,因为HTML文档的编码并不总是在HTML文档中找到。另一方面,如果XML文档不是UTF-8,则必须在文档中指定的编码。

因此,您将所拥有的内容转换为适当的XML。您可以将编码声明添加到XML文档,也可以将其编码转换为UTF-8。

use Encode qw( from_to );
from_to($xml, "iso-8859-1", "UTF-8");