encodeRFC2047String now puts the real charset name into the headers, not

always iso-8859-1 as before.

svn path=/trunk/kdenetwork/kmail/; revision=69845
wilder-work
Michael Haeckel 26 years ago
parent 05ecbc387c
commit f85649944d
  1. 4
      kmmessage.cpp
  2. 16
      kmmsgbase.cpp
  3. 7
      kmmsgbase.h

@ -1399,7 +1399,7 @@ void KMMessage::setHeaderField(const QString& aName, const QString& bValue)
DwField* field;
QString aValue = "";
if (!bValue.isEmpty())
aValue = encodeRFC2047String(bValue);
aValue = encodeRFC2047String(bValue, charset());
if (aName.isEmpty()) return;
@ -1829,7 +1829,7 @@ void KMMessage::addBodyPart(const KMMessagePart* aPart)
QString subtype = aPart->subtypeStr();
QString cte = aPart->cteStr();
QString contDesc = KMMsgBase::encodeRFC2047String(aPart->
contentDescription());
contentDescription(), charset());
QString contDisp = aPart->contentDisposition();
QString name = KMMsgBase::encodeRFC2231String(aPart->name());
bool RFC2231encoded = aPart->name() != name;

@ -1,9 +1,12 @@
// kmmsgbase.cpp
#include <kdebug.h>
#include <kglobal.h>
#include <klocale.h>
#include "kmmsgbase.h"
#include <mimelib/mimepp.h>
#include <qtextcodec.h>
#include <qregexp.h>
#ifndef KRN
#include <kmfolder.h>
@ -365,10 +368,17 @@ const QString KMMsgBase::decodeRFC1522String(const QString& _str)
//-----------------------------------------------------------------------------
const char especials[17] = "()<>@,;:\"/[]?.= ";
const QString KMMsgBase::encodeRFC2047String(const QString& _str)
const QString KMMsgBase::encodeRFC2047String(const QString& _str,
const QString& charset)
{
if (_str.isEmpty()) return _str;
QCString latin = _str.local8Bit();
QString cset;
if (charset.isEmpty()) cset = KGlobal::locale()->charset();
else cset = charset;
QTextCodec *codec = QTextCodec::codecForName(cset);
QCString latin;
if (codec) latin = codec->fromUnicode(_str);
else latin = _str.local8Bit();
int cr, start, stop, pos = 0;
int latinLen = latin.length();
char hexcode;
@ -403,7 +413,7 @@ const QString KMMsgBase::encodeRFC2047String(const QString& _str)
if (stop <= start) stop = cr;
} else stop = cr;
while (pos < start) { result += latin[pos]; pos++; }
result += QString("=?iso-8859-1?q?");
result += QString("=?%1?q?").arg(cset);
while (pos < stop)
{
numQuotes = 0;

@ -123,13 +123,14 @@ public:
static const QString decodeBase64(const QString& str);
static const QString encodeBase64(const QString& str);
/** This function handles both encodings described in RFC1522:
/** This function handles both encodings described in RFC2047:
Base64 ("=?iso-8859-1?b?...?=") and quoted-printable */
static const QString decodeRFC1522String(const QString& aStr);
/** Encode given string as described in RFC2047 (update for RFC1522)
/** Encode given string as described in RFC2047:
using quoted-printable. */
static const QString encodeRFC2047String(const QString& aStr);
static const QString encodeRFC2047String(const QString& aStr,
const QString& charset);
/** Encode given string as described in RFC2231
(parameters in MIME headers) */

Loading…
Cancel
Save