[Vienna-pm] locales, umlaute, sortierung ...

peter pilsl pilsl at goldfisch.at
Tue Nov 9 02:42:45 PST 2010


hallo,

tja ... irgendwie dachte ich dass diese Probleme jahrelang hinter mir liegen ... aber nun steh ich wieder dort:

ich schaffs nicht, eine liste von wörtern lexigraphisch korrekt zu sortieren.

----------------------
#!/usr/bin/perl -w

use strict;
use locale;
use POSIX qw(locale_h);
setlocale(LC_ALL, "de_AT.UTF-8");

my @l;
@l=qw(ampel ampele ösen zöse ampez ampex);
push(@l,"ampel vorrang","öse nöse","Öse nöse","ampe wampe"," sowas");

@l=map {lc($_)} @l;

@l=sort {$a cmp $b} @l;

print join("\n", at l),"\n";
--------------------------


mein ergebnis:

ampel
ampele
ampel vorrang
ampe wampe
ampex
ampez
ösen
öse nöse
Öse nöse
 sowas
zöse

das ist offensichtlich falsch. Erstens wird das grosse "Ö" nicht kleingemacht und zweitens sollte das leerzeichen noch vor dem a kommen und nicht irgendwo zwischen l und x  :)

locales sind immer schwierig. Aber ich glaub ich hab alles richtig gemacht. die locales sind auf den test-systemen installiert  (prüfen mit "locale -a", erzeugen mit locale-gen) und auch die environment-variablen LANG,LC_ALL,LC_COLLATE,LC_CTYPE sind richtig gesetzt obwohl das glaub ich ned nötig ist, weil ich eh die POSIX-locales im script nehm.

getestet hab ich das auf insgesamt vier Rechnern. zwei mit perl 5.8.8 und zwei mit perl 5.10.1   (alles ubuntu: 8.04, 9.04, 10.04 u 10.10)

ich hab auch alle möglichen utf8::encode und utf8::decode und das umwandeln auf latin1 vor dem sortieren und rückwandeln auf utf8 nachher probiert. hat alles ned funktioniert.

was überseh ich? kann das wer auf einem anderen system als ubuntu testen? danke & danke für tips,
peter





More information about the Vienna-pm mailing list