2014-08-28 93 views
1

我必須解析沒有用正確編碼標記的XML(在XML::LibXML)。具體來說,它包含德語ü變音符號(可能有其他符號),但沒有<?xml version="1.0" encoding="iso-8859-1" ?>等。當我嘗試使用的libxml這條線來分析這樣的:如何忽略由於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

「我不明白爲什麼一個簡單的德語變音符號是不正確的UTF-8?」根據你所說的,你有字節「FC」(「ü」的iso-8859-1編碼)。 'FC'不是有效的UTF-8。 「ü」的UTF-8編碼是字節「C3 BC」。 – ikegami 2014-08-28 14:35:03

回答

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"); 
+1

嗯,它是XML,它只是不正確的XML;)。但我知道你的意思。順便說一句,你的解決方案似乎很好地工作。 – jackthehipster 2014-08-28 14:30:12

+3

@jackthehipster,它不符合XML文檔的定義。 potayto,potahto。 – ikegami 2014-08-28 14:31:51

相關問題