【问题标题】:How to ignore parsing errors due to wrong encoding in LibXML?如何忽略由于 LibXML 中的错误编码导致的解析错误?
【发布时间】:2014-08-28 13:48:00
【问题描述】:

我必须解析未使用正确编码标记的 XML(在 XML::LibXML 中)。具体来说,它包含一个德语ü Umlaut(可能还有其他),但没有<?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?

【问题讨论】:

  • Re “我不明白为什么简单的德语变音符号不是正确的 UTF-8?”根据您所说的(“ü”的iso-8859-1编码),您有字节FCFC 不是有效的 UTF-8。 “ü”的UTF-8编码为字节C3 BC

标签: xml perl parsing encoding utf-8


【解决方案1】:

您所拥有的不是 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");

【讨论】:

  • 嗯,它是 XML,它只是不正确的 XML ;)。但我知道你的意思。顺便说一句,您的解决方案似乎效果很好。
  • @jackthehipster,它与 XML 文档的定义不匹配。 potayto,potahto。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
相关资源
最近更新 更多