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 16:10
#189028 #189028
2018-10-24T13:29:03 rosti
Liest Du eigentlich was wir hier posten?


Du meinst "Lass das doch einfach mit UTF-8, Unicode ist schwer, lasst uns shoppen gehen!"?
Tatsache ist, dass ich ordentlichen UTF-8-Support haben will.

Code (perl): (dl )
1
2
3
4
5
6
#!/usr/bin/perl
use strict;
use warnings;

my $x = lc('ẞ');
print "$x\n";


Gibt "ẞ" aus.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl
use strict;
use warnings;

use utf8;
binmode(STDOUT,':utf8');

my $x = lc('ẞ');
print "$x\n";


Gibt 'ß' aus. Deine "Lösung" ist also gequirrlte Katzenkacke und hat hier aber auch mal überhaupt gar nix zu suchen. Vergib mir also, wenn ich darauf nicht eingegangen bin.

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.

2018-10-24T13:29:03 rosti
Hab ich doch geschrieben was passier: Genau das schaltet die interne Kodierung ab.


...

Wir reden hier vom Binmode des Filehandles in Gwen's Beispiel, nicht vom Binmode von STDOUT. GwenDragon hat nicht als UTF-8 markierte UTF-8-Daten ohne Textencoding in eine Datei gepackt und dann gesagt: seht her, es funktioniert auch ohne!!1!

Siehe https://stackoverflow.com/questions/6162484/why-do...

tchrist
Code that assumes it can open a text file without specifying the encoding is broken.


Und genau das ist das Problem. "Ich habe hier einen Sack UTF-8-Daten bekommen, aber weder sage ich Perl, dass das UTF-8-Daten sind, noch sage ich dem I/O-Layer, dass es UTF-8-Daten sind. Ich lasse die Daten einfach binär und packe die in die Datei. Einfach so. Ohne Encoding. Und damit wirklich arbeiten kann ich zwar nicht, aber seht her: mein Programm funktioniert, und DAS ist es ja, was zählt" (nur tut's das halt nicht, was ich auch geschrieben hatte. Weil mit den Daten nicht gearbeitet wird.)

So, und was *du* meinstest, war der Binmode von STDOUT. Warum es eine dämliche Idee ist, einfach die Augen zu verschließen und UTF-8-Support zu deaktivieren, habe ich bereits oben behandelt. Herrschaftszeiten aber auch.

2018-10-24T13:29:03 rosti
Und selbstverständlich ist diese zwingend erforderlich wenn ein Code bytesemantisch arbeiten soll, was gzip, deflate usw. nämlich tun: Sie arbeiten mit Bytes und nicht mit Zeichen, bspw. ist die Anzahl der Bytes nicht gleich der Anzahl der Zeichen!


... äh, ja. Nix anderes habe ich auch geschrieben:

Your_name
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.


Ich habe mich darüber auch nicht beschwert, im Gegenteil:

Your_name
gunzip kann nicht erkennen (und mal so gesagt: woher denn auch? Ich rufe die Funktion ohne Encoding-Kontext auf)


Also, was wolltest du jetzt genau sagen?
Last edited: 2018-10-25 08:27:25 +0200 (CEST)

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