mailto-Protokoll

31/01/2008 - 17:36 von Armin Zingler | Report spam
Hallo NG,

ich starte mit Process.Start("mailto:...") das Standard E-Mail-Programm.
Da das mailto-Protokoll einige Einschrànkungen hat, habe ich mir die
zugehörigen RFCs reingezogen (RFC 2368, RFC 1738) und auch im Web
gesucht. Mir ist aber einiges immer noch nicht ganz klar, v.a. was den
Zeichensatz angeht. Beispiel: Umlaute. Sie gehören bekanntlich nicht zum
ASCII-Zeichensatz. Wenn ich mit "%.." ein Zeichen kodiere, sind nur
Werte bis %7F möglich. Andererseits kann ich auch "...?subject=blöd"
übergeben, und das "ö" wird auch richtig im Betreff eingetragen. Was ist
denn nun möglich?

Wenn ich die RFCs lese, muss alles, was nicht a-z, A-Z, 0-9 oder eines
der Zeichen "!*'()," ist, escaped werden. Dann wàre ich aber auf ASCII
beschrànkt, und somit fielen die Umlaute weg. Praktisch sind sie aber
möglich.

Also: Es liegt ein Unicode-String vor, der als "Subject" verwendet
werden soll. Welche Zeichen muss ich escapen? Welche sind erlaubt?
Welche (ganz) verboten? Das ist irgendwie ein Mischmasch, der nirgendes
richtig dokumentiert ist. Hat da jemand eine zuverlàssige Quelle parat?


Armin
 

Lesen sie die antworten

#1 Christoph Schneegans
31/01/2008 - 18:09 | Warnen spam
Armin Zingler schrieb:

Andererseits kann ich auch "...?subject=blöd" übergeben, und das "ö" wird
auch richtig im Betreff eingetragen.



Gewagte These. Mit wie vielen E-Mail-Clients hast du denn getestet?

Was ist denn nun möglich?



URLs sind eine Folge von ASCII-Zeichen;

<mailto:?subject=blöd>

ist also keine gültige URL.

Wenn ich die RFCs lese, muss alles, was nicht a-z, A-Z, 0-9 oder eines
der Zeichen "!*'()," ist, escaped werden. Dann wàre ich aber auf ASCII
beschrànkt, und somit fielen die Umlaute weg.



Nein, unmaskierte Nicht-ASCII-Zeichen mußt du laut RFC eben %HH-maskieren.
Dummerweise ist aber nicht definiert, welche Zeichencodierung dabei
verwendet werden muß; UTF-8-codiert erhàlt man

<mailto:?subject=bl%C3%B6d>,

mit ISO-8859-1 hingegen

<mailto:?subject=bl%F6d>,

das ist beides gleichermaßen richtig. Man kann sich natürlich fragen,
warum in einem RFC von 1998 Fragen der Internationalisierung völlig
ausgespart blieben. Es kann auch gut sein, daß in der Praxis unmaskierte
Nicht-ASCII-Zeichen besser funktionieren. Wenn du kein Risiko eingehen
willst, bist du aber ziemlich sicher auf ASCII-Zeichen beschrànkt.

<http://schneegans.de/lv/> · Validator für "language tags" gemàß RFC 4646

Ähnliche fragen