Moin!
Irgendwas codiert bei dir UTF-8 doppelt..
Genau das tut encoding 'utf8'.
Und wie würdest du vorgehen, dass es nicht doppelt kodiert wird?
Wie so häufig, gibt die Dokumentation hier Auskunft.
Zwei Seiten findet man zu diesem Thema:
1. use utf-8 - http://perldoc.perl.org/utf8.html
Zusammengefaßt: Diese Anweisung sagt Perl, dass der Skripttext in UTF-8 codiert ist. Dadurch werden die Multibyte-Zeichen im Skripttext als UTF-8-Zeichen betrachtet. Ansonsten hat diese Anweisung keine Auswirkungen, insbesondere nicht auf Ein- und Ausgabe.
2. use encoding - http://perldoc.perl.org/encoding.html
Zusammengefaßt: Macht dasselbe, wie "use utf-8", zusätzlich ändert es aber noch das Encodingverständnis von STDIN und STDOUT. Das ist offensichtlich zuviel - oder zuwenig, denn ist durchaus denkbar, dass Perl entweder zuviel UTF-8-codiert, oder dass ihm die Information fehlt, dass die Eingabedaten schon UTF-8 sind und nur noch als solches betrachtet werden müssen.
Mit anderen Worten: Entweder bringst du Perl bei, die Eingabedaten korrekt zu interpretieren, oder du bringst Perl bei, die korrekten Ausgabedaten nicht zu verfälschen.
Ich habe von Perl kaum Ahnung, insbesondere nicht, was das Unicode-Handling angeht. Ich kann nur einige Erfahrungen mit Browserexperimenten zu UTF-8 anbieten - und die sagen mir schlicht, dass eine korrekte Formularbehandlung durch Browser nur passiert, wenn man an allen denkbaren Stellen (HTTP-Header, Meta-Tag, accept-encoding-Attribut) den Browser unmißverständlich drauf hinweist, dass das Encoding "UTF-8" ist. Mit anderen Worten: Wenn es dann nicht klappt, hast du ein Problem im Skript - nicht im Formular oder Browser.
- Sven Rautenberg
"Love your nation - respect the others."