Cz::Cstocs a UTF-8
Honza Pazdziora
adelton na fi.muni.cz
Úterý Duben 19 16:15:46 MEST 2005
On Tue, Apr 19, 2005 at 03:26:46PM +0200, Jan Kasprzak wrote:
> Mam takovy problem s konverzi z/do UTF-8. Mam "legacy" aplikace,
> ktere pouzivaji Cz::Cstocs a potrebuju je postupne migrovat na novejsi
> Perl. No a automaticke testy mi odhalily problem, ze konverze do UTF-8
> nenastavuje UTF-8 flag, coz pak dale vadi.
>
> ------------------------------------------------
> #!/usr/bin/perl -w
>
> use Cz::Cstocs;
> use Encode;
>
> my $iue = sub { Encode::decode('iso-8859-2', shift); };
> my $iuc = new Cz::Cstocs 'il2', 'utf8';
>
> my $data = 'ì¹èø¾ø¾ýáíé';
> # Na predchozim radku je horni rada ceske klavesnice (9 znaku od e s hackem
> # po e s carkou).
>
> print join ' ', map { ord } split //, $data; print "\n";
> print join ' ', map { ord } split //, &$iuc($data); print "\n";
> print join ' ', map { ord } split //, &$iue($data); print "\n";
> ------------------------------------------------
>
> No a ted je otazka, jak tohle resit, nejlepe tak, abych nemusel
> menit ty aplikace, ale jen Cz::Cstocs (ktere mam na systemu s novejsim
> Perlem asi jine, takze zmena nevadi).
A potrebujes teda co? Neni reseni tam vsude misto Cz::Cstocs dat to
Encode? Nebo chces Cz::Cstocs ten flag nastavovalo? Pak asi
neco jako (netestovano)
--- Cstocs.pm.orig 2005-04-19 16:12:33.000000000 +0200
+++ Cstocs.pm 2005-04-19 16:14:13.000000000 +0200
@@ -461,6 +461,10 @@
$fntext .= qq! \$e =~ s/$src/\$conv->{\$&}/sog; !;
}
+ if ($outputenc eq 'utf8') {
+ $fntext .= q! utf8::decode($e); !;
+ }
+
$fntext .= ' $e; } else { undef; }} @_; if (wantarray) { return @converted; } else { return join "", map { defined $_ ? $_ : "" } @converted; } }';
print STDERR "Conversion function for $inputenc to $outputenc:\n$fntext\n" if DEBUG;
Nebo jeste neco jineho?
--
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
.project: Perl, mod_perl, DBI, Oracle, large Web systems, XML/XSL, ...
Only self-confident people can be simple.
Další informace o konferenci Perl