Tobi’s Blog

Gedanken zur Softwareentwicklung und anderes

Archiv für die 'Internationalis.' Kategorie

Internationalisierung: Alles rund um Zeichensätze und Zeitzonen

RFC konforme E-Mail-Header

Erstellt von Tobi am 13. November 2008

Wie schon bei den Problemen mit UTF-8 E-Mails berichtet, gibt es eine Spezifikation, wie ein Mail-Header zu kodieren ist. Und als Header zählt auch der Betreff.

Laut dieser Vorgabe (RFC 1522) dürfen in E-Mail-Headern nur die ersten 127 Zeichen des ASCII-Zeichensatzes benutzt werden. Quasi nur alphanumerische Zeichen und eine Hand voll Sonderzeichen. Also auf keinen Fall Umlaute oder ähnliches.

Wenn man zum Versenden z.B. das Perl-CPAN-Modul MIME::Lite benutzt, werden die nicht erlaubten Zeichen nicht automatisch konvertiert. Da muss man sich selber kümmern.

Am leichtesten geht es mit dem Perl-CPAN-Modul MIME::EncWords. Die Funktion MIME::EncWords::encode_mimewords(STRING) : QUOTED_STRING macht eben genau diese Konvertierung, wobei es interessanter weise den aktuellen Zeichensatz erraten kann. Diesen Teil werde ich noch mal genauer unter die Lupe nehmen, da es schon länger auf meiner Liste steht.

Wie oben schon erwähnt, kann und sollte man alle E-Mail-Header quoten. Die Funktion ändert im übrigen den übergebenen String nur, wenn es wirklich nötig ist. Reine Ascii-Inhalte, die unterhalb der 127 Zeichens liegen, werden so belassen wie sie sind. Den E-Mail-Inhalt sollte man aber nicht damit übersetzen lassen. Das funktioniert zwar auch soweit, aber die Zeilenumbrüche sind bei mir dabei verloren gegangen.

Abgelegt unter Internationalis., Perl | Keine Kommentare »

Zeichensatzdetektor

Erstellt von Tobi am 14. November 2005

Mal ein, zugegeben sehr unschöner und keinesfalls professioneller, Ansatz, den Zeichensatz eines Textes zu identifizieren

#!/usr/bin/perl
use strict;
use Unicode::MapUTF8 qw(to_utf8 from_utf8 utf8_supported_charset);
my $uuml = 'ü'; # Erwartetes Zeichen
my $code = 129; # Code des unbekannen Zeichensatzzeichens
my @character_sets = utf8_supported_charset; # List available character set encodings
my $char = chr($code);
foreach my $charset (@character_sets) {
my $utf8 = Unicode::MapUTF8::to_utf8({ -string => $char, -charset => $charset });
# from $charset
if (ord($uuml) == ord(Unicode::MapUTF8::from_utf8({ -string => $utf8, -charset => 'iso-8859-1' }))) {
warn $charset;
}
}

Es gibt aber schon Tools, die genau das leisten:
Charset-Detect via Java
Diverse Tools für Perl

Ein Problem gibt es noch mit dem automatischen Abschneiden von Inhalten. Versucht man, einen UTF-8 String auf eine konkrete Länge zu kürzen, kann es passieren, dass man ein 2-Byte-Zeichen genau in der Mitte teild. Ergebniss ist im günstigsten Fall dann ein unschönes Viereck am Ende des Strings, im schlechtesten fall ein Steuerzeichen, dass weitere Inhalte verschwinden lässt. Hierfür bietet der Quellcode von Lingua::DetectCharset da immerhin ein paar Ansätze.

Es gibt einen neuen Ansatz für einen Detektor für Zeichensätze. Mal sehen, was das ergibt.

Abgelegt unter Internationalis. | 2 Kommentare »

UTF-8 E-Mails

Erstellt von Tobi am 14. November 2005

Wenn eine Anwendung UTF8-Accounts UND auf eine Sprache festgelegte Accounts besitzt, kann die Mailversendung nicht immer per UTF8 erfolgen. Weiterlesen »

Abgelegt unter Internationalis. | Keine Kommentare »

Unicode in Perl 5

Erstellt von Tobi am 14. November 2005

Laut IX gibt es Probleme, wenn man in Perl eine aus MySQL gelesene Variable verwendet, ohne sie explizit in UTF8 zu wandeln. Weiterlesen »

Abgelegt unter Internationalis. | Keine Kommentare »

XML::LibXML Zeichensatzprobleme

Erstellt von Tobi am 14. November 2005

Es gibt bei LibXML und XSLT-Transformation probleme, wenn im Text Steuerzeichen unter HEX 19 existieren. Die Konvertierung ist z.B. mit die abgebrochen, als das Zeichen 0B (vertikaler Tabulator) im Text auftauchte.

Derzeit ist die einzige Lösung, das Zeichen händisch zu entfernen. Um es zu automatisieren, müssen wir erst mal Anfang und Ende eines Unicode-Zeichens erkennen. Wenn da jemand einen Ansatz hat…

Abgelegt unter Internationalis. | Keine Kommentare »