Sonderzeichen werden nicht korrekt dargestellt

  • Hallo zusammen,


    ich habe ein kleines Problem. In der Betreffzeile einer E-Mail stehen bei einem Agenten den ich geschrieben habe unter Umständen sonderzeichen, die Betreffzeile wird flexibel aus den Datenbanktiteln bezogen. Sonderzeichen werden jedoch nicht korrekt dargestellt, sondern durch andere Zeichen wie Anführungsstriche ersetzt. Liegt das Problem im Headeraufbau?


    Code
    Dim overviewheader As NotesMIMEHeader [...]
    
    
    Set overviewheader = overviewbody.CreateHeader("Subject")
    subject = Cstr(db.Title + "äö") +|: | + Cstr(Year(Today)) + |/| + Cstr(CalculateWeekNo(Today)) + | PP Promo Overview|
    Call overviewheader.SetHeaderVal(subject)


    Verwendet wird UTF-8.

  • MIME ist HTML also musst du auch die Zeichen maskiert darstellen.
    Sonst ist es eben nicht sauber mit den dir bekannten Problemen


    [color=FF0000]Bitte auch aufs Themenpräfix achten[/color]

  • Was heisst da flexibel ?


    Wenn du MIME direkt manipulierst musst du eben auch die Inhalte im richtigen Format reinschreiben


    Oder schreibst du in eine HTML Datei wenn du diese per Texteditor veränderst etwa auch direkt Umlaute und Sonderzeichen rein ?

    • Offizieller Beitrag

    Ersetzen kannst Du die Sonderzeichen auch per Script.

    Code
    txt = "hier im Beispiel mal für ä umgesetzt"txt = join(split(txt, "ä"), "ä")

    jetzt kannst du dir ein 2-dimensionales Array bauen. An Position x = 0 schreibst du da zu suchenden Zeichen und an Position x=1 das zu ersetzende Zeichen. Dann kannst du es über eine schleife lösen.


    Das Array musst du natürlich um alle Zeichen, die konvertiert werden müssen, erweitern.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Klaro,


    ich arbeite nun nicht mehr mit NotesMIMEHeader, sondern habe es musterhaft so gemacht:


    Code
    subject = Cstr(db.Title) + "Gewünschte Elemente, Text"
    
    
    overviewdoc.Subject = Cstr(subject)


    So werden die Sonderzeichen auch korrekt dargestellt.

    • Offizieller Beitrag

    Warum der CStr in der 1. und 2. Zeile?
    db.Title gibt schon einen String zurück!


    Anmerkung: Bei der Verkettung von Variablen zu einem String, kann auch ein & verwendet werden. Damit wird dann automatisch in einen String konvertiert.


    Beispiel:


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Moin !


    Ich habe das gleiche Problem mit den Umlauten.


    Leider hat auch der Vorschlag mit dem Ersetzen von z.B. "ü" (ue) nach "ü" nichts gebracht, da anscheinend bei Headern keine Konvertierung durchgeführt wird. Es bleibt dann bei z.B. "für" bei dem gesetzten "für".


    Hat jemand einen weiteren Vorschlag ?


    Danke,
    Thorsten

    Manche Menschen haben einen Horizont mit Radius null und das nennen sie dann ihren Standpunkt.

  • Ja, sicher.


    Ich schreibe die Mail in einem Agenten, der per View-Action auf meinem Client läuft und 2 Mails an mich selber (Notes und an web.de) sendet.
    Entweder findet keine Konvertierung statt (wenn HTML formatiert) oder der Umlaut wird zu einem Grafikkästchen.


    Beide Mails

    Manche Menschen haben einen Horizont mit Radius null und das nennen sie dann ihren Standpunkt.

  • Moin !


    Ablauf: Neues docMail wird erzeugt, dann werden Werte aus einer Konfiguration (docTemplate) gelesen und in das docMail geschrieben. Es geht nur um das Subject, welches Probleme macht.




    In sHtmlErsetzt steht der Text, der mit ConvertToHTML nach der von Dir ja auch schon erwähnten Ersetzungsmethode "HTMLisiert" wird.


    Das Ergebnis: Der Body funktioniert wunderbar, er wird anschließend vom Server korrekt konvertiert, mit Umlauten, Links, etc.


    Aber der Header (Subject) kann offenbar keine Umlaute enthalten.


    Mein Notes Client ist 8.5.2FP2, mein Mail Server 8.5.1FP3


    Welche weiteren Einstellungen möchtest Du genau wissen ?


    Thorsten

    Manche Menschen haben einen Horizont mit Radius null und das nennen sie dann ihren Standpunkt.

  • Moin !


    Natürlich habe ich auch wie in meinem ersten Post beschrieben


    Set nmhA = nmeBody.CreateHeader("Subject")
    sText = docTemplate.Getitemvalue("MailSubject")(0)
    Call nmhA.SetHeaderVal(ConvertToHTML(sText))


    ausprobiert.


    Winke,
    Thorsten

    Manche Menschen haben einen Horizont mit Radius null und das nennen sie dann ihren Standpunkt.

  • Subject wie übrigens alle SMTP Header Informationen kennt keine HTML Entities (diese gibt es nur für den Body), sondern dafür gibt es ebenfalls klare Regeln wie Umlaute dort codiert werden müssen.


    Siehe z.B. hier

  • Moin !


    Danke, der Link war genau der richtige.


    Ich habe mir diese Funktion geschrieben, welche mir den Text so kodiert, daß es in einem Header verwendet werden kann:


    Code
    Function textQEncode(sText As String) As String	Const cQEncodingStart = "=?iso-8859-1?Q?"	Const cQEncodingEnd = "?="	Const cMaxChar = 95	Static i As Integer	Static sArr1(cMaxChar) As String	Static sArr2(cMaxChar) As String	If i = 0 Then ' Initialize during 1st call		For i = 0 To cMaxChar			sArr1(i) = Chr$(160 + i)			sArr2(i) = "=" & Hex((160 + i))		Next	End If	' Sonderfälle für in der Q-Kodierung genutzte Zeichen <= 160	sText = Replace(sText, "=", "=3D") ' Erst die = raus	sText = Replace(sText, "_", "=95") ' _ wird später für Leerzeichen genutzt	sText = Replace(sText, Chr(32), "_") ' Alle Leerzeichen zu _	sText = Replace(sText, "?", "=3F") ' ? raus	' Benutze Arrays für alle restlichen (8bit) Zeichen	textQEncode = cQEncodingStart & Replace(sText, sArr1, sArr2) & cQEncodingEndEnd Function


    Aufruf dann mit

    Code
    sText = textQEncode(sText)


    Ich hoffe es hilft auch Julgo und einigen anderen hier weiter.


    Winke,
    Thorsten

    Manche Menschen haben einen Horizont mit Radius null und das nennen sie dann ihren Standpunkt.