OT: Unicode->ISO v Perlu
Ivo Panacek
ivop na regionet.cz
Úterý Únor 4 16:49:53 CET 2003
On Út, 2003-02-04 at 15:31, Borek Lupomesky wrote:
> Je to off-topic, ale snad nekdo poradi: jak v Perlu zkonvertovat
> interni Unicodovou reprezentaci retezce na nejake 8-bitove
> kodovani (iso-8859-1) na vystupu? Umi to perl sam o sobe nebo
> potrebuju nejaky dodatecny modul? Bohuzel ve vystupu se budou
> muset michat UTF-8 a iso-8859-1, takze asi nejde pouzit ":8859-1"
> pri volani open().
Mozna to delam komplikovane, ale pouzivam tohle:
use Unicode::Map();
use Unicode::String qw( utf8 utf16 );
$outputEncoding = "ISO-8859-2";
$sourceEncoding = "ISO-8859-2";
$DecodeMap = new Unicode::Map($outputEncoding);
$EncodeMap = new Unicode::Map($sourceEncoding);
sub getOutputEncoding { return $outputEncoding; }
sub getSourceEncoding { return $sourceEncoding; }
sub setOutputEncoding { my $new = shift;
return if $outputEncoding eq $new;
$outputEncoding = $new;
$DecodeMap = new Unicode::Map($outputEncoding);
}
sub setSourceEncoding { my $new = shift;
return if $sourceEncoding eq $new;
$sourceEncoding = $new;
$EncodeMap = new Unicode::Map($sourceEncoding);
}
sub encodeUTF8 { my $local = shift;
return $local if $sourceEncoding eq 'UTF-8';
my $utf16 = $EncodeMap->to_unicode($local);
my $u = utf16($utf16);
return $u->utf8;
}
sub decodeUTF8 { my $utf8 = shift;
return $utf8 if $outputEncoding eq 'UTF-8';
my $u = utf8( $utf8 );
return $DecodeMap->from_unicode($u->utf16);
}
a jsou potreba prislusne moduly, ja do RH7.2 pridavam tohle:
perl-Unicode-Map-0.110-10.i386.rpm
perl-Unicode-String-2.06-10.i386.rpm
ivo
Další informace o konferenci Linux