Perl war ursprünglich nicht Unicode-freundlich, und die Arbeit mit UTF-8 erfordert explizite Hinweise. Modernes Perl kann Zeichenfolgen als interne Abstraktionen (utf8-markierte Skalare) speichern, jedoch erfordern Ein-/Ausgabefunktionen besondere Aufmerksamkeit.
binmode, :encoding(UTF-8)).use utf8; im Quellcode, wenn er Literale in Unicode enthält.open my $fh, '<:encoding(UTF-8)', 'myfile.txt' or die $!; binmode STDOUT, ':encoding(UTF-8)';
Encode, utf8, open, charnames.use Encode; my $bytes = encode('UTF-8', $string); # Holen Sie sich die Bytes my $string = decode('UTF-8', $bytes); # Holen Sie sich die Zeichenfolge
Reicht es aus,
use utf8;an den Anfang des Skripts hinzuzufügen, damit alle Ein-/Ausgabeoperationen in UTF-8 erfolgen?
Antwort: Nein! Die Direktive use utf8; interpretiert nur Unicode-Literale im Quellcode. Für Ein-/Ausgabe müssen IO-Schichten bei open oder über binmode/open pragma festgelegt werden! Zum Beispiel:
binmode STDOUT, ':encoding(UTF-8)'; open my $fh, '>:encoding(UTF-8)', $filename;
Geschichte
Geschichte
Geschichte
Bei der Integration des Perl-Dienstes mit dem MySQL-Client wurde die Einstellung des Clients auf utf8 ignoriert, man arbeitete mit Byte-Zeichenfolgen. An der Schnittstelle zum Web-Interface traten Fehler auf – einige Zeichen waren beschädigt, einige Abfragen "zerstörten" die Datenstruktur. Eine explizite Umwandlung über Encode und die Einstellung 'mysql_enable_utf8' halfen.