Thread LWP::UserAgent UTF-8-Mangling die 2991992ste (24 answers)
Opened by Your_name at 2018-10-23 14:29

haj
 2018-10-25 10:59
#189034 #189034
User since
2015-01-07
521 Artikel
BenutzerIn

user image
Guest Your_name
Tatsache ist, dass ich ordentlichen UTF-8-Support haben will.
Den liefert Perl, spätestens seit Version 5.18, hinreichend unfallfrei.

Guest Your_name
Ich empfehle dir, dich mal in Unicode-Support in Perl einzulernen, denn es gilt: kann man alles lernen, muss man aber selber machen. Für dich machen kann ich nicht.
Das gilt für jeden, auch für Dich. Aus Deinem Ausgangstext:
Guest Your_name
"decoded_content" verwende ich nicht, weil die Funktion viel zu fett und lahmarschig ist, Header durchgeht, Speicherallokationen macht und Haste nicht gesehen.

Wenn Du das Decoding nicht von LWP erledigen läßt, dann musst Du es selber machen.

Somit kommen wir zum Ausgangspunkt der Fragen:

Guest Your_name
1. Wie sage ich LWP::UserAgent, dass es den Scheiß lassen soll?
LWP::UserAgent macht keinen Scheiß, sondern liefert wahlweise die unbehandelte Bytewurst in $res->content oder den nach Transfer-Encoding und gegebenenfalls Text-Encoding ausgepackten Wert in $res->decoded_content.

Guest Your_name
2. Wie sage ich IO::Uncompress::Gunzip, dass es den Scheiß lassen soll?
IO::Uncompress::Gunzip macht keinen Scheiß, sondern wandelt eine Bytewurst in eine andere Bytewurst um.

Du hast in Deinem Code nicht mit den korrekten Mitteln deklariert, dass der Inhalt der Response nach dem Auspacken ein UTF-8-codierter String ist. Die Tatsache, dass Du weißt, dass da nur UTF-8-codierte Texte kommen können, heißt nicht, dass Perl das weiß.

Es sollte inzwischen angekommen sein, dass use utf8; nicht das richtige ist, und vom UTF-8-Flag läßt man am besten die Finger. Das Mittel der Wahl dafür ist Encode::decode nach dem Dekomprimieren.

Guest Your_name
Disclaimer: ich komme aus der C-Ecke. Da konvertiert mir überhaupt gar keiner meine Strings, ohne dass ich das explizit ansage. Und genauso hätte ich das auch gerne in Perl.

Perl konvertiert gar nichts ohne Ansage. Wenn Du mit UTF-8-codierten Daten arbeiten willst, die von externen Quellen kommen, dann musst Du das Encoding angeben:
Tom Christiansen, erweiterte Version
Code that assumes it can open a text file or retrieve data over the web without specifying the encoding is broken.

View full thread LWP::UserAgent UTF-8-Mangling die 2991992ste