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