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

Gast Your_name
 2018-10-24 13:11
#189026 #189026
GwenDragon
Und man kann kein UTF-8-Flags setzen.


Klaro. Deswegen bekomme ich auch keine Mojibake mehr in meine Dateien, die ich mit binmode(':utf8') setze, und in meine MySQL-Datenbank und und und ... also dafür, dass ich das nicht setzen kann, hat das bei mir gestern *w-u-n-d-e-r-b-a-r* funktioniert. Muss man halt nur wissen, dass Perl noch diese Altlasten aus ISO-8859-1 mit sich rumträgt.

Man kann sogar das UTF-8-Flag abfragen, mit is_utf8. Das macht dann keine Prüfung, ob das Ding auch wirklich UTF-8-kompatibel ist, sondern fragt nur das laut deiner Aussage unsetzbare UTF-8-Flag ab.

Und ich habe mich gestern auch noch mal hingesetzt und an meiner eigenen Box angesehen. Was macht "use utf8"? Setzt das UTF-8-Flag. Aber `IO::Uncompress::Gunzip` verwendet "use bytes", cleared das Flag also wieder. Dann dekomprimiert gunzip meine Daten binär-orientiert, setzt aber das UTF-8-Flag nicht.

GwenDragon
Wozu Du _utf8_on brauchst, ist mir ein Rätsel. geht auch ohne wie mein Programm zeigte.


Dein Programm arbeitet ja auch nicht mit den Daten.
Wenn du den binmode für dein Filehandle setzt, dann nimmt Perl automatisch ":raw" als Layer an - sprich, konvertiert nix. Perl ist zeichenorientiert. Wenn das UTF-8-Flag nicht gesetzt ist, sieht es die Bytes in deinem Scalar einfach nur als Bytes an, und da du ":raw" als Layer angibst, konvertiert er nix. Und da es sich bei deinen Bytes *zufälligerweise* um UTF-8-Daten handelt, schreibt es dir binär und ohne Konvertierung Daten rein. Typischer Fall von "ich habe zwei Kodierungsbugs, die sich gegenseitig aufheben".

Probier als Layer für dein Filehandle mal ':utf8' anzugeben. Das Ergebnis wird herrlichste Mojibake sein.
Last edited: 2018-10-24 13:33:06 +0200 (CEST)

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