Thread XML::LibXML und encoding problem (1 answers)
Opened by Ekki at 2015-02-22 20:11

Ekki
 2015-02-22 20:11
#179825 #179825
User since
2015-01-12
3 Artikel
BenutzerIn
[default_avatar]
Hallo.

Ich kämpfe mit einem Problem bei der Benutzung der $doc->toStringHTML() Methode. Die stirbt mir mit einem
i18n error : output conversion failed due to conv error, bytes .. .. .. ..

Wenn ich nach dem Fehler suche kommt eine Diskussion auf Stackoverflow die das Problem beschreibt. Der Fehelr ist bekannt (siehe Perl bugtracker).

Und zwar hat das mit der Behandlung des Encoding bei createTextNode, appendTextChild und ähnlichen Funktionen zu tun. Der beschriebene Workaround ist es mit utf8::upgrade( $s ) dem String das utf8-Flag zu verpassen. Soweit klar.

Jetzt rufe ich aber garnicht ->createTextNode( $s ) oder ->appendtextChild('Node', $s) auf, sondern das passiert irgendwo in den Tiefen von ->toStringHTML(), vermute ich. D.h. ich kann da nix upgraden oder so.

Der HTML-Source (HTML5!) kommt aus einem utf-8 encoded File, geparst wird mit HTML::HTML5::Parser, weil der Parser von XML::LibXML nicht gut mit HTML5 umgehen kann. Beim Parsen ist die Option {encoding => 'utf-8'} gesetzt.

$doc->encoding() sagt 'utf-8'.
$doc->actualEncoding() sagt 'utf-8'.
$ file meinsource.html sagt 'HTML document, UTF-8 Unicode text, with very long lines'.
use utf8; habe ich mal mit mal ohne probiert, keine Änderung.
Entgegen den Hinweisen bei XML::LibXML habe ich mal mit und ohne IO-Layern getestet, keine Änderung.

Hat noch jemand ne Idee?

Oder anders gefragt:
Kennt jemand einen gut konfigurierbaren HTML5-Prettyfier? Das solls nämlich werden. Das alte HTML-Tidy kann kein HTML5, das neuere 'tidy' ist noch als experimental gekennzeichnet (ich habs noch nicht getestet).

Danke.
Ekki

View full thread XML::LibXML und encoding problem