[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