Thread multipart message mit MIME::Lite und utf8
(13 answers)
Opened by Superfrank at 2007-08-31 15:06
Aus deiner einen Zeile die du gepostet hast kann man aber auch nicht sagen ob alles korrekt ist, vorallem versucht MIME::Lite intern genauso zu senden. Ob und wie Zeichen richtig dargestellt werden hängt von einigen Punkten ab:
* Ist der Sourcecode selber UTF8? * Ist "use utf8" gesetzt damit perl darüber bescheid weiß? * Enthält die variable etc. die man ausgiebt UTF8 Daten? * (Ist das UTF8 Flag für eine Variable gesetzt) * Ist "use open", "binmode" etc. so gesetzt das die Ausgabe UTF-8 ist? * Wird der Mail ein Encoding mitgeteilt. Ist es richtig? und welches Encoding nutzt der Mail Client zur Anzeige wenn nicht? Durch das nicht beachten einer Regel in der Kette, kann die Ausgabe falsch werden. Allerdiengs kann z.B. durch das nicht beachten mehrere dieser Regeln wieder das Ergebnis richtig aussehen. Deswegen kann es aber dazwischen immernoch Probleme geben. Ein kleines beispiel: * Du nutzt UTF8 in Sourcecode. Also einen Editor der in UTF8 schreibt * Du setzt allerdiengs kein "use utf8". * Du gibst die Daten direkt aus ohne "use open ':utf8'" oder binmode zu setzen * Sagen wir es handelt sich um eine Webseite. Du setzt aber bei der Ausgabe das charset auf "utf8" * Ergebnis: Die Ausgabe sieht korrekt aus: Probleme: * Wenn du z.B. "ä" schreibst dann siehst du auch ein "ä". Da dein Editor ja alles in UTF-8 anzeigt/schreibt. Da du aber kein "use utf8" nutzt erkennt Perl ein "ä" nicht als ein "ä" an. Sondern sieht hier zwei Bytes (zeichen) hintereinander. Defaultmäßig springt perl dann zu iso-8859-1. Also es zeigt dir dann die Zeichen aus dem iso-8859-1 Zeichensatz an. Was natürlich kein ä ist, sondern zwei "komische" zeichen. * Da kein "use open ':utf8'" oder ähnliches benutzt wird gibt Perl Defaultmäßig alles "iso-8859-1" aus. Da du "use utf8" nicht nutzt, und die interne Darstellung sowieso schon "iso-8859-1" ist werden einfach diese beiden komischen zeichen 1:1 ausgegeben * Allerdiengs hast du im Charset angegeben das der Browser utf8 nutzen soll. Und Glücklicherweise ergeben genau diese beiden zeichen die in iso-8859-1 sind ein "ä" in utf8. Es sieht also alles korrekt aus. ------- Auf deiner oberen Zeile übertragen kann das jetzt vieles bedeuten. So kann man nicht sagen warum es "korrekt" arbeitet. Es hängt davon was du sonst noch so in deinem Code stehen hast. Wenn du beispielsweise einen Editor hast der in utf8 Speichert. Du hast "use utf8" im code stehen. Und schreibst jetzt die Zeile wie oben dann würden "äöü" auch Korrekt ausgegeben. Den Perl weiß bescheid das der Sourcecode in utf8 geschrieben ist. Das heißt ein "ä" würde auch als ein "ä" erkannt, und nicht als zwei bytes. Wenn du jetzt kein "use open ':utf8'" stehen hast oder mit binmode nicht explizit die ausgabe des Filehandes "MAIL" auf utf8 setzt dann wandelt Perl die Unicode Zeichen nach "iso-8859-1" um. Das heißt anstatt ein utf8 "ä" das zweibytes groß ist, wird die codierung eines "ä" aus dem iso-8859-1 Zeichensatzes genutzt. Damit wird die email verschickt. Und da du keine expliziten charset angibst gehen die meisten eMail programme meist von "iso-8859-1" oder "cp1252" aus. Schlußendlich wird auch in der Mail ein richtiges "ä" angezeigt. Alelrdiengs wird nicht wirklich utf8 genutzt. Würdest du irgendein Zeichen nutzen das nicht in iso-8859-1 vorkommt z.B. das (Euro) zeichen. Dann würdest du dieses auch nicht in der Mail sehen. (Obwohl das "" (Euro) zeichen vllt. schlecht gewählt ist, gibt nämlich umstände wo du es doch siehst, trotzt iso-8859-1 Codierung das es eigentlich nicht enthält. Aber ging ja erstmal nur um das Prinzip.) Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
|