diff --git a/configuredialog.cpp b/configuredialog.cpp index 5ac23fbdf..2a95764a5 100644 --- a/configuredialog.cpp +++ b/configuredialog.cpp @@ -2138,8 +2138,8 @@ void AppearancePage::ReaderTab::readCurrentFallbackCodec() bool found = false; for( ; it != end; ++it) { - const QString encoding = KGlobal::charsets()->encodingForName(*it); - if ( encoding == "ISO 8859-15" ) + const QString encoding = KMMsgBase::encodingForName(*it); + if ( encoding == "ISO-8859-15" ) indexOfLatin9 = i; if( encoding == currentEncoding ) { @@ -2167,7 +2167,7 @@ void AppearancePage::ReaderTab::readCurrentOverrideCodec() int i = 0; for( ; it != end; ++it) { - if( KGlobal::charsets()->encodingForName(*it) == currentOverrideEncoding ) + if( KMMsgBase::encodingForName(*it) == currentOverrideEncoding ) { mOverrideCharsetCombo->setCurrentIndex( i ); break; @@ -2211,11 +2211,11 @@ void AppearancePage::ReaderTab::save() { GlobalSettings::self()->setCollapseQuoteLevelSpin( mCollapseQuoteLevelSpin->value() ); GlobalSettings::self()->setFallbackCharacterEncoding( - KGlobal::charsets()->encodingForName( mCharsetCombo->currentText() ) ); + KMMsgBase::encodingForName( mCharsetCombo->currentText() ) ); GlobalSettings::self()->setOverrideCharacterEncoding( mOverrideCharsetCombo->currentIndex() == 0 ? QString() : - KGlobal::charsets()->encodingForName( mOverrideCharsetCombo->currentText() ) ); + KMMsgBase::encodingForName( mOverrideCharsetCombo->currentText() ) ); } diff --git a/kmcomposewin.cpp b/kmcomposewin.cpp index b9efcf757..0b0c4a089 100644 --- a/kmcomposewin.cpp +++ b/kmcomposewin.cpp @@ -2245,7 +2245,7 @@ void KMComposeWin::setCharset( const QByteArray &aCharset, bool forceDefault ) ++it, i++ ) { if (i > 0 && ((mCharset == "us-ascii" && i == 1) || (i != 1 && KGlobal::charsets()->codecForName( - KGlobal::charsets()->encodingForName(*it)) + KGlobal::charsets()->encodingForName(*it)) == KGlobal::charsets()->codecForName(mCharset)))) { mEncodingAction->setCurrentItem( i ); @@ -2470,7 +2470,7 @@ void KMComposeWin::slotInsertFile() { KConfig *config = KMKernel::config(); KConfigGroup group( config, "Composer" ); - QString encoding = KGlobal::charsets()->encodingForName(encodingStr).toLatin1(); + QString encoding = KMMsgBase::encodingForName(encodingStr).toLatin1(); QStringList urls = group.readEntry( "recent-urls", QStringList() ); QStringList encodings = group.readEntry( "recent-encodings", QStringList() ); // Prevent config file from growing without bound @@ -2534,8 +2534,7 @@ void KMComposeWin::slotSetCharset() } mAutoCharset = false; - mCharset = KGlobal::charsets()->encodingForName( mEncodingAction-> - currentText() ).toLatin1(); + mCharset = KMMsgBase::encodingForName( mEncodingAction->currentText() ).toLatin1(); } //----------------------------------------------------------------------------- diff --git a/kmmsgbase.cpp b/kmmsgbase.cpp index 3e1d3d834..1ec31f65d 100644 --- a/kmmsgbase.cpp +++ b/kmmsgbase.cpp @@ -399,6 +399,20 @@ QStringList KMMsgBase::supportedEncodings(bool usAscii) return encodings; } +//----------------------------------------------------------------------------- +QString KMMsgBase::encodingForName( const QString &descriptiveName ) +{ + QString encoding = KGlobal::charsets()->encodingForName( descriptiveName ); + + // According to http://www.iana.org/assignments/character-sets, uppercase is + // prefered in MIME headers + if ( encoding.toUpper().contains( "ISO " ) ) { + encoding = encoding.toUpper(); + encoding.replace( "ISO ", "ISO-" ); + } + return encoding; +} + //----------------------------------------------------------------------------- QByteArray fallbackCharsetForRFC2047Decoding( const QByteArray &prefCharset ) { diff --git a/kmmsgbase.h b/kmmsgbase.h index 22c1dd3c6..539e1d163 100644 --- a/kmmsgbase.h +++ b/kmmsgbase.h @@ -259,6 +259,14 @@ public: /** Return a list of the supported encodings */ static QStringList supportedEncodings(bool usAscii); + /** + * Drop-in replacement for KCharsets::encodingForName(). The problem with + * the KCharsets function is that it returns "human-readable" encoding names + * like "ISO 8859-15" instead of valid encoding names like "ISO-8859-15". + * This function fixes this by replacing whitespace with a hyphen. + */ + static QString encodingForName( const QString &descriptiveName ); + /** Copy all values from other to this object. */ void assign(const KMMsgBase* other); diff --git a/kmreaderwin.cpp b/kmreaderwin.cpp index abab20842..a0d6104ef 100644 --- a/kmreaderwin.cpp +++ b/kmreaderwin.cpp @@ -1118,7 +1118,7 @@ void KMReaderWin::setOverrideEncoding( const QString & encoding ) QStringList encodings = mSelectEncodingAction->items(); int i = 0; for ( QStringList::const_iterator it = encodings.begin(), end = encodings.end(); it != end; ++it, ++i ) { - if ( KGlobal::charsets()->encodingForName( *it ) == encoding ) { + if ( KMMsgBase::encodingForName( *it ) == encoding ) { mSelectEncodingAction->setCurrentItem( i ); break; } @@ -1158,7 +1158,7 @@ void KMReaderWin::slotSetEncoding() if ( mSelectEncodingAction->currentItem() == 0 ) // Auto mOverrideEncoding.clear(); else - mOverrideEncoding = KGlobal::charsets()->encodingForName( mSelectEncodingAction->currentText() ); + mOverrideEncoding = KMMsgBase::encodingForName( mSelectEncodingAction->currentText() ); update( true ); }