Perl başlangıçta Unicode dostu değildi ve UTF-8 ile çalışmak belirli talimatlar gerektiriyor. Modern Perl, dizeleri içsel soyutlamalar (utf8-flagged scalars) olarak saklayabiliyor, ancak girdi/çıktı işlemleri özel bir dikkat gerektiriyor.
binmode, :encoding(UTF-8)).use utf8; kullanın.open my $fh, '<:encoding(UTF-8)', 'myfile.txt' or die $!; binmode STDOUT, ':encoding(UTF-8)';
Encode, utf8, open, charnames modülleri.use Encode; my $bytes = encode('UTF-8', $string); # Baytları alır my $string = decode('UTF-8', $bytes); # Diziyi alır
use utf8;ifadesini skriptin başına eklemek, tüm girdi/çıktı işlemlerinin UTF-8 ile gerçekleşmesi için yeterli midir?
Cevap: Hayır! use utf8; ifadesi yalnızca kaynaktaki Unicode edebiyatlarını yorumlar. Girdi/çıktı için open sırasında veya binmode/open pragma ile IO katmanlarını ayarlamak gerekir! Örneğin:
binmode STDOUT, ':encoding(UTF-8)'; open my $fh, '>:encoding(UTF-8)', $filename;
Tarih
Tarih
Tarih
Perl servisini MySQL istemcisi ile entegre ederken, istemcinin utf8 ayarını göz ardı ettiler ve bayt dizeleri ile çalıştılar. Web arayüzüyle kesişimde bazı semboller bozuk geldi ve bazı sorgular veri yapısını "bozdu". Encode üzerinden açık bir dönüştürme ve 'mysql_enable_utf8' ayarını kullanmak yardımcı oldu.