[Vienna-pm] utf8 string als hash-key
max
prozessor13 at gmx.net
Mon Sep 21 07:46:21 PDT 2009
hallo
> max schrieb:
>> keine schleche idee!, aber Wolfgang Laun hat mir grad eben schon
>> den entscheidenden tip gegeben. naemlich
>
> Nun ja, da hättest Du auch mein Posting lesen können. ;-/
> (Latin1 wäre wichtig gewesen, wenn die andere Lib selber auf Werte
> mit bestimmten Schlüsseln zugreift. Diesbezügl. hattest Du Dich
> noch nicht geäußert gehabt. UTF-8 hat den Vorteil das alle Zeichen
> drin Platz haben.)
das stimmt schon, aber ich habs zu dem zeitpunkt noch nicht einsehen
wollen, dass es nicht anders geht. vorallem hab ich gedacht mit latin1
verliere ich im schlechtesten fall informationen, und mit base64 waere
das nicht der fall, darum spontan die bessere alternative fuer mich.
> Zu Deinem Ausgangspunkt noch ein paar Fragen.
>
> Was tut:
> %hash=map { utf8::upgrade(my $k=$_); $k => $hash{$_} } keys %hash;
> $rdb->mget(\%hash); # Verliert utf8-Flag
> %hash=map { _utf8_on(my $k=$_); $k => $hash{$_0} } keys %hash;
bleibt haengen... geiches passiert bei "normalen" utf8 strings
(wohlgemerkt nur unter perl5.10)
> Und was tut:
> %hash=map { encode('iso-8859-1',$_) => $hash{$_} } keys %hash;
> # ^- nur Latin1, kein Flag
> $rdb->mget(\%hash);
> # solange nur latin1-Zeichen sollte es passen.
das klappt komischerweise. versteh ich ueberhaupt nicht! kann sogar
mit dem 6byte langam 'öäü' string den hash-accessen (wo ja eigentlich
nur 3byte keys drinnen sein sollten). oder macht hier perl dann
automatisch die konvertierung?? falls ja, dann kann das aber, wie du
eh schon sagst mit chinesischen zeichen nicht funken.
> Und drittens:
> Falls deine Lib reines Perl ist, schau ob dort irgendwo
> "use bytes;" steht und kommentier das mal testweise aus.
> Vielleicht erübrigt sich dann Dein Workaround, um den
> Workaround der Bibl. für ältere Perls.
das modul ist perl/xs, und das problem ist nicht in aelteren perls
sondern in perl5.10.
die use bytes directive ist fuer das ganze TokyoTyrant package
eingeschalten, und darin wird dann extrem viel mit pack, unpack usw
gemacht. das ist mir irgendwie zu heiss, da was anzufassen.
> Noch ein paar Fragen:
> - Taintmode?
nein
> - PERL_UNICODE Umgebungsvariable?
nein
> - Insbesondere Unterschiede zw. den Systemen?
ich denke nicht, os x und debian halt, und perl5.8.9 und perl5.10.0.
alles mit den defaultconfigs installiert
danke wiedermal.
max.
>
> ciao,
> Josef
>
> PS: utf8::upgrade($_) for keys %hash;
> geht für values aber nicht für keys.
hmm. das versteh ich irgendwie nicht... was du da meinst?
More information about the Vienna-pm
mailing list