[Italia-pm] Bug nel modulo Encode::GSM0338 ?

Guido Brugnara gdo at leader.it
Sat Feb 24 12:08:11 PST 2018


Nell'utilizzare il modulo Encode::GSM0338 ho riscontrato che se si codifica il carattere "@" (code 0x00) la conversione da "gsm0338" non è corretta.
Nella documentazione infatti c'è scritto:
  "Mapping \x00 to '@' causes too much pain everywhere"

Quale alternativa potrei utilizzare che non sia bacata come Encode::GSM0338?

bye
gdo

NOTE: Usando questo codice di esempio 
___________________________________________
#!/usr/bin/perl

use Encode qw/encode decode/;

sub Ord {
  my $str = shift;
  my @list;
  for my $c (split //, $str) { push @list, ord($c); }
  return join ' ', @list;
}

sub Test {
  my($mess, $str) = @_;
  my $gsm0338 = encode('gsm0338', $str);
  print "$mess\nencode('gsm0338', '$str') --> ".Ord($gsm0338)."\n";
  print "decode('gsm0338', encode('gsm0338', '$str')) --> '".decode('gsm0338', $gsm0338)."'\n\n";
}

Test 'Con il solo carattere @ tutto ok:', '@';

Test 'Con due caratteri @, ritorna una stringa vuota', '@@';

Test 'Se dopo il singolo carattere @ segue un carattere normale tutto ok', 'a at b';

Test 'Se dopo il singolo carattere @ segue un carattere speciale la riconversione è errata', 'a@|€';
___________________________________________

... ottengo l'output:
___________________________________________
Con il solo carattere @ tutto ok:
encode('gsm0338', '@') --> 0
decode('gsm0338', encode('gsm0338', '@')) --> '@'

Con due caratteri @, ritorna una stringa vuota
encode('gsm0338', '@@') --> 0 0
decode('gsm0338', encode('gsm0338', '@@')) --> ''

Se dopo il singolo carattere @ segue un carattere normale tutto ok
encode('gsm0338', 'a at b') --> 97 0 98
decode('gsm0338', encode('gsm0338', 'a at b')) --> 'a at b'

Se dopo il singolo carattere @ segue un carattere speciale la riconversione è errata
encode('gsm0338', 'a@|€') --> 97 0 27 64 27 101
Wide character in print at test.pl line 17.
decode('gsm0338', encode('gsm0338', 'a@|€')) --> 'a@ ¡€'
___________________________________________

Da cui si vede bene che la codifica inversa non funziona.


More information about the Italia-pm mailing list