Hallo,
ich verzweifle noch an einem wahrscheinlich trivialen Problem mit der Zeichenkodierung.
Mein Skript frägt eine Seite ab und erhält die Daten UTF-8 kodiert.
Die Daten werden in einer komplexeren Datenstruktur abgespeichert.
Bei einem Datenelement sollen die Leerzeichen entfernt und die Sonderzeichen ersetzt werden - und hier scheitert das Ganze.
Erstmal die Sub:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sub formatNames {
my $obj = shift;
my $type = shift;
my %sChar = ("ä" => "ae", "Ä" => "Ae", "ü" => "ue", "Ü" => "Ue", "ö" => "oe", "Ö" => "Oe", "ß" => "ss" );
my $replacement = join ("|", keys(%sChar));
if ($type eq 'filename') {
my $filename = $obj->{DATA}{name};
$filename =~ s/\s*//g;
$filename =~ s/($replacement)/$sChar{$1}/g;
$obj->{DATA}{filename} = $filename;
return
}
In dem entsprechenden String werden die Leerzeichen alle noch ersetzt. Die Umlaute jedoch werden völlig ignoriert - ein 'völlig' wird nicht in 'voellig' umgewandelt.
Ich habe schon einige Sachen aus diesem Forum durch, dazu gehören:
Encode::Guess -> liefert UTF-8 zurück
Encode::Encode bzw. Decode bringt keine Unterschiede.
Encode::from_to: liefert die Anzahl der Zeichen zurück. (??)
Wie bekomme ich die Umlaute in UTF-8 kodierten Strings umgewandelt?
$q =~ /(bb|[^b]{2})/