Thread LWP::UserAgent UTF-8-Mangling die 2991992ste
(24 answers)
Opened by Your_name at 2018-10-23 14:29 GwenDragon 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 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) |