diff --git a/kmmessage.cpp b/kmmessage.cpp index c69addd3b..ff47bcdf7 100644 --- a/kmmessage.cpp +++ b/kmmessage.cpp @@ -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; diff --git a/kmmsgbase.cpp b/kmmsgbase.cpp index 2ce134108..03164b766 100644 --- a/kmmsgbase.cpp +++ b/kmmsgbase.cpp @@ -1,9 +1,12 @@ // kmmsgbase.cpp #include +#include +#include #include "kmmsgbase.h" #include +#include #include #ifndef KRN #include @@ -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; diff --git a/kmmsgbase.h b/kmmsgbase.h index c4f1d08b7..51880cd0c 100644 --- a/kmmsgbase.h +++ b/kmmsgbase.h @@ -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) */