Perl was oorspronkelijk niet Unicode-vriendelijk en het werken met UTF-8 vereist expliciete aanwijzingen. Moderne Perl kan strings opslaan als interne abstracties (utf8-flagged scalars), maar invoer- en uitvoeroperaties vereisen speciale aandacht.
binmode, :encoding(UTF-8)).use utf8; in de broncode als deze Unicode-literals bevat.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); # Verkrijg bytes my $string = decode('UTF-8', $bytes); # Verkrijg string
Is het voldoende om
use utf8;aan het begin van het script toe te voegen zodat alle invoer- en uitvoeroperaties in UTF-8 plaatsvinden?
Antwoord: Nee! De directieve use utf8; interpreteert alleen Unicode-literals in de bron. Voor invoer- en uitvoer moeten IO-lagen worden ingesteld bij open of via binmode/open pragma! Bijvoorbeeld:
binmode STDOUT, ':encoding(UTF-8)'; open my $fh, '>:encoding(UTF-8)', $filename;
Geschiedenis
Geschiedenis
Geschiedenis
Bij de integratie van de Perl-service met de MySQL-client negeerden ze de instelling van de client naar utf8, en werkten met byte-strings. Bij de interface met het web kwamen defecten aan het licht - een deel van de symbolen werd gebroken en sommige aanvragen "braken" de datastructuur. Expliciete conversie via Encode en de instelling 'mysql_enable_utf8' hielp.