nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Re: utf-8 und DBD::mysql

Von: Moritz Lenz (moritz@faui2k3.org) [Profil]
Datum: 09.11.2008 21:36
Message-ID: <49173b8d$0$30233$9b4e6d93@newsspool1.arcor-online.net>
Newsgroup: de.comp.lang.perl.misc
Martin Kißner wrote:
> 	binmode STDOUT, ':utf8';
>
> kann ich nicht verwenden, da ich auch Daten ausgebe, die aus utf-8
> kodierten Dateien kommen und diese Ausgaben dann zerbröselt werden.

Die "richtige" Lösung ist, alle von aussen kommenden Daten zu
dekodieren
(entweder das von den Module manchen lassen, wie du das mit DBD::mysql
demonstriert hast, oder von IO-Layern), und dann tatsächlich bindmode
STDOUT, ':utf8'; zu verwenden.

Wenn du binäre und Textstrings vermischst sind Fehler vorprogrammiert.

Um Larry zu zitieren:
: Q. Why is this so clumsy?
: A. The trick is to use Perl's strengths rather than its weaknesses.


> Meine Frage:
> Gibt es zwischenzeitlich eine einfachere Methode, utf-8 kodierte Daten
> aus einer Datenbank auszulesen und korrekt auszugeben?

Das auslesen der Daten aus der Datenbank ist nicht dein Problem. Das
Problem ist, dass du Daten aus anderen Quellen nicht dekodierst.

> PS: Mich wundert außerdem, dass ich "utf8::is_utf8('bla')"
verwenden kann,
> auch wenn ich nirgendwo ein "use utf8 irgendwas" verwendet habe.

Das ist in der Tat ein wenig gewöhnungsbedürftig, und ist wohl
in der
perldoc-Seite von utf8 in diesem Satz versteckt:

: Do not use this pragma for anything else than telling Perl that your
: script is written in UTF-8.

Also soll man 'use utf8;' auch nicht für das Laden der entsprechenden
Funktionen benutzen. Das ist also einer der vielen Sonderfälle (genauso
wie du UNIVERSAL::isa benutzen kannst, ohne vorher UNIVERSAL zu laden).

Grüße,
Moritz

--
Moritz Lenz
http://perl-6.de/	http://moritz.faui2k3.org/

[ Auf dieses Posting antworten ]

Antworten