Thread Zeichensatzproblem mit Š
(15 answers)
Opened by bianca at 2019-06-07 19:07 2019-06-09T05:56:21 bianca Na ja, das Problem entsteht ja eigentlich dadurch, dass man mehr als 255 verschiedene Zeichen braucht, um durch die internationale Welt zu kommen. Du hast Dir das Leben selbst schwer gemacht, indem Du drei verschiedene 1-Byte-Zeichenkodierungen in einem Programm einsetzt: Perl versteht Latin-1, Notepad++ speichert Deinen Code in Windows-CP1252, und selbst hast Du noch Latin-9 hinzugefügt. Ich denke, Latin-9 war Weg in die falsche Richtung. Hier mal ein Beispiel, wie man die verschieden Codesets verwenden kann, wenn die Datei in "ANSI" (Windows CP1252) abgespeichert ist: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #!/usr/bin/perl use strict; use warnings; use Data::Dumper; use 5.010; use Encode; sub decode_ansi { decode('cp1252',$_[0]) } my @namen = ( decode('ISO-8859-15',"Zala Kralj & Ga\250per \246antl"), # besser vermeiden decode_ansi("Zala Kralj & Gašper Šantl"), # so sieht's doch besser aus! decode_ansi("Björk Guðmundsdóttir"), ); my $filter = decode_ansi( q/[^0-9a-z @\.,_#+±%()\[\]\$\-~¿!'&§°¨ßäöüÅÄÁÀÃÂÖÜÚÉÈÑþœçáàåãâëéèêòóúùîïí©øØô½ñšŠý®¬µ¯ð]/ ); for my $name (@namen) { my @liste; for (my $p = 0; $p < length($name); $p ++) { if (substr($name,$p,1) =~ /$filter/i) { push @liste,$p+1; } } say Dumper(\@liste); } Hier werden alle Literale, auch der Satz von Zeichen für den Filter, sobald als möglich mit dem passenden Encoding decodiert. Der Vorteil ist, dass Du nicht um drei Ecken erraten musst, welchen BROKEN BAR Du für ein Š brauchst, sondern die Zeichen so in den Filter einsetzen kannst, wie Du sie im Editor siehst. Als Demo habe ich mal den ð hinzugefügt, den Du brauchst, wenn Du Björk mit vollem Namen in Deine Sammlung aufnehmen willst. Solltest Du später mal Musik von 郎朗 sammeln, dann kannst Du immer noch auf UTF-8 umsatteln. |