Index: test/test_email_renamed.py =================================================================== --- test/test_email_renamed.py (revision 54390) +++ test/test_email_renamed.py (working copy) @@ -1537,6 +1537,13 @@ ('rg', None), ('\xe5', 'iso-8859-1'), ('sbord', None)]) + def test_i18nheader_unicode(self): + h = make_header([('[XXX]', 'us-ascii'), ('Re:', 'us-ascii'), + ('\xbb\xfe', 'euc-jp'), ('\xa9', 'iso-8859-1'), + ('abc', 'us-ascii')]) + self.assertEqual(unicode(h), u'[XXX] Re: \u6642\u00a9 abc') + self.assertEqual(str(h), """\ +[XXX] Re: =?iso-2022-jp?b?GyRCO34bKEI=?= =?iso-8859-1?q?=A9?= abc""") # Test the MIMEMessage class Index: test/test_email.py =================================================================== --- test/test_email.py (revision 54390) +++ test/test_email.py (working copy) @@ -1539,6 +1539,13 @@ ('rg', None), ('\xe5', 'iso-8859-1'), ('sbord', None)]) + def test_i18nheader_unicode(self): + h = make_header([('[XXX]', 'us-ascii'), ('Re:', 'us-ascii'), + ('\xbb\xfe', 'euc-jp'), ('\xa9', 'iso-8859-1'), + ('abc', 'us-ascii')]) + self.assertEqual(unicode(h), u'[XXX] Re: \u6642\u00a9 abc') + self.assertEqual(str(h), """\ +[XXX] Re: =?iso-2022-jp?b?GyRCO34bKEI=?= =?iso-8859-1?q?=A9?= abc""") # Test the MIMEMessage class Index: header.py =================================================================== --- header.py (revision 54390) +++ header.py (working copy) @@ -199,15 +199,12 @@ for s, charset in self._chunks: # We must preserve spaces between encoded and non-encoded word # boundaries, which means for us we need to add a space when we go - # from a charset to None/us-ascii, or from None/us-ascii to a - # charset. Only do this for the second and subsequent chunks. + # from a charset to None/us-ascii, from None/us-ascii to a + # charset, or from None/us-ascii to None/us-ascii. Only do this + # for the second and subsequent chunks. nextcs = charset if uchunks: - if lastcs not in (None, 'us-ascii'): - if nextcs in (None, 'us-ascii'): - uchunks.append(USPACE) - nextcs = None - elif nextcs not in (None, 'us-ascii'): + if lastcs in (None, 'us-ascii') or nextcs in (None, 'us-ascii'): uchunks.append(USPACE) lastcs = nextcs uchunks.append(unicode(s, str(charset)))