[Vienna-pm] utf8 string als hash-key
max
prozessor13 at gmx.net
Mon Sep 21 03:00:12 PDT 2009
bins schonwieder.
> Dazu gibt es auch einen vorgesehenen Weg:
>
> · utf8::encode($string)
ok. das hab ich jetzt verwendet, und unter perl 5.8.9 funkt das auch
(wie auch schon das _utf8_off/on)
aber leider gehts immer noch nicht, und ich hab noch folgendes
rausgefunden:
die TokyoTyrant mget methode macht definitv was komisches:
sub x {
my %hash = map { $_ => 'ko' } @_;
print "1: " . join(",", keys %hash) . "\n";
$rdb->mget(\%hash);
print "2: " . join(",", keys %hash) . "\n";
foreach (keys %hash) {
my $k = $_;
utf8::decode($k);
$hash{$k} = $hash{$_};
}
print "3: " . join(",", keys %hash) . "\n";
return \%hash;
}
liefert die ausgabe in perl 5.8.9:
1: öäü
2: öäü
3: öäü,öäü
soweit sogut, mget macht was mit dem hash, aber man kann es
reparieren, aber:
unter 5.10 bleibt die methode mget haengen. d.h. ich muss ein
utf8::encode dranmachen.
my %hash = map { $_ => 'ko' } @_;
wird zu
my %hash = map { utf8::encode($_); $_ => 'ko' } @_;
der output ist:
1: öäü
2: öäü
3: öäü,öäü
schaut auch richtig aus.. aber jetzt kommts: wenn ich sowas schreib
my %hash = map { my $k = $_;utf8::encode($k); $k => 'ko' } @_;
dann kommt zwar der gleiche output, aber die HASH->FETCH methode
liefert nix mehr:
d.h. ich bau:
foreach my $k (keys %hash) {
print "k: $k -> $hash{$k}\n";
}
irgendwo ein und bekomm:
k: öäü ->
k: öäü -> ok
obwohl Data::Dumper:
$VAR1 = {
"\x{f6}\x{e4}\x{fc}" => 'ok',
'öäü' => 'ok'
};
liefert. also fuer mich ist das eindeutig ein perl5.10 bug!!
lg.
More information about the Vienna-pm
mailing list