utf-8 email

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • utf-8 email

      Hallo ihr Lieben,

      ich versuche gerade ein mail mit utf-8 Zeichensatz zu erstellen/versenden. Leider gelingt mir dies nur mit mageren Ergebnis, soll heißen, der Text wird falsch dargestellt. Wie gehe ich vor:
      eine Datei mit czechischen Text in utf-8 liegt vor, ohne BOM.
      Eine DvISE Vorlage wurde erstellt.
      Programmtechnisch lese ich die Vorlage und die Textdatei ein. Plaziere in der Vorlage den utf-8 text, übergebe das an die API

      FormattedText* pFormattedText = NULL;
      pMailItem->get_BodyText(&pFormattedText);
      pFormattedText->put_Charset(strCharset.AllocSysString());
      pFormattedText->put_PlainText(strPlainText.AllocSysString());
      pFormattedText->put_HTMLText(strHtmlText.AllocSysString());

      und versende es

      pMailItem->Send(vType, vEmpty);


      das Problem, wenn ein Zeichen 3 Bytes lang ist, dann wird es auch als 3Bytes angezeigt, aber an für sich besteht es nur aus einem lesbaren Buchstaben.

      Lese ich die Datei in WordPad ein, so ist alles ok

      Füge ich den utf-8 Text (copy/paste aus wordpad) händisch über das Info-Center in die Vorlage ein, versende es, dann kommt es auch richtig bei dem Empfänger an.

      Worin könnte mein Fehler liegen ?

      Vielen Dank

      Gruß
      -Uwe
    • für den Fall das jemand auch darüber stolpert antworte ich mir selber.

      Da der Text in sich schon utf-8 ist, so muss man statt

      pFormattedText->put_HTMLText(strHtmlText.AllocSysString());

      nun so vorgehen (schematisch dargestellt)

      int len = MultiByteToWideChar(CP_UTF8, 0, strHtmlText.GetString(), strHtmlText.GetLength(), 0, 0);
      BSTR bstr = SysAllocStringLen(0, len);
      MultiByteToWideChar(CP_UTF8, 0, strHtmlText.GetString(), strHtmlText.GetLength(), bstr, len);
      pFormattedText->put_HTMLText(bstr);

      Gruß
      -Uwe