50. kasu praktikoa: karaktere berezien idazketa (UTF-8. iso-latin-1…)

Batzuetan sortzen zaizkigu arazoak karaktere bereziak idatzi nahi ditugunean. Aurreko kasu praktikoan, esate baterako, Wikipediatik lortutako artikulu-izenburuetan gertatu zitzaigun “Govern_electrònic” idatzi ordez, beste hauek azaltzen zitaizkikigun hasierako bertsioetan: “Govern_electr%C3%B2nic” edo  “Govern_electrònic”

Ariketa honetan ikusiko dugu horrelakoetan karaktereak kodetzeko bi maila bereizi behar direla, eta horiek perl-ez lantzeko paketeak eta funtzioak aipatuko ditugu.

Wikipediatik hartutako karaktereak idazterakoan arazoak egon daitezke tildedun karaktereak, zuriuneak edo karaktere bereziak ondo ikusteko.
Horrelakoetan jakin behar da bi kodeketa maila daudela:

  • Karaktereak UTF-8 edo iso-Latin-1 kodeak adibidez.
    Hori tratatzeko URI::Escape paketeko uri_unescape funtzioa erabiltzen da.
  • Karaktereak idazterakoan edo irakurtzerakoan UTF-8ko bi karaktereak bakar bat gisa ulertu behar direla zehaztea.
    • Hori tratatzeko Encode paketeko decode funtzioa erabiltzen da.
      Adibidez: print encode(“utf-8″, $str2).”\n”; # esplizitua
    • Hasieran esan daiteke print guztiak utf8-an izango direla:
      binmode STDOUT, “:utf8
      eta orduan print agindu guztietan ez da esan behark.
    • Irakurketetan antzera egin daiteke fitxategiaren formatuaren arabera.        Adibidez:
      open(my $fh, “fitx.txt”) or die “Ezin dut fitx.txt ireki\n”;
      binmode $fh, “:utf8”;
      my $l = <$fh>; ….

$ perl uri_eta_kodekera.pl

$jat = Govern_electr%C3%B2nic
Govern_electr%C3%B2nic
$str. = uri_unescape(.$jat);
Govern_electrònic
$str2 = decode(“utf8”, $str);
Govern_electrònic

Programa (uri_eta_kodekera.pl):

#!/usr/local/bin/perl
use Encode;
use URI::Escape;

binmode STDOUT, “:utf8”;# standard ouput-era doan guztia UTF-8 kodearekin  kodetu
#binmode STDOUT, “latin-1″;# standard ouput-era doan guztia latin-1 kodearekin kodetu

#Jatorrizkoa (wikipediatik hartutako karaktere-katea): Govern_electr%C3%B2nic”
my $jat = “Govern_electr%C3%B2nic”;
print  ‘$jat = Govern_electr%C3%B2nic’.”\n”;
print $jat.”\n”; #  Govern_electr%C3%B2nic

# unescape
my $str = uri_unescape($jat);
print  ‘$str. = uri_unescape(.$jat);’.”\n”;
print $str.”\n”; # Govern_electrònic

# %C3 perl-ek uste du Uncidecodeco U+00C3 karakterea dela “Ô
# %B2 perl-ek uste du Uncidecodeco U+00B2 karakterea dela “²”

my $str2 = decode(“utf8”, $str); # honekin, perl-ek daki $str utf-8 kodetua dagoela %C3%B2 => unicode U+00F2 “ò”
print  ‘$str2 = decode(“utf8″, $str);’.”\n”;
print $str2.”\n”; # Govern_electrònic

#print decode(“utf-8″, $str2).”\n”; # esplizitua

Utzi erantzuna

Zure e-posta helbidea ez da argitaratuko. Beharrezko eremuak * markatuta daude