aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/email/header.py
diff options
context:
space:
mode:
authorR David Murray <rdmurray@bitdance.com>2012-03-14 02:59:51 -0400
committerR David Murray <rdmurray@bitdance.com>2012-03-14 02:59:51 -0400
commit7441a7aedd251d529eb14eff9a16708e9cb32409 (patch)
tree1d525eb5ac468752cacf460b4228a0150ee48814 /Lib/email/header.py
parent21c71bac5f684b0ec1665d841d05f91e078c3964 (diff)
downloadcpython-7441a7aedd251d529eb14eff9a16708e9cb32409.tar.gz
cpython-7441a7aedd251d529eb14eff9a16708e9cb32409.zip
#14291: if a header has non-ascii unicode, default to CTE using utf-8
In Python2, if a unicode string was assigned as the value of a header, email would automatically CTE encode it using the UTF8 charset. This capability was lost in the Python3 translation, and this patch restores it. Patch by Ali Ikinci, assisted by R. David Murray. I also added a fix for the mailbox test that was depending (with a comment that it was a bad idea to so depend) on non-ASCII causing message_from_string to raise an error. It now uses support.patch to induce an error during message serialization.
Diffstat (limited to 'Lib/email/header.py')
-rw-r--r--Lib/email/header.py7
1 files changed, 6 insertions, 1 deletions
diff --git a/Lib/email/header.py b/Lib/email/header.py
index 2e687b7a6f1..3250d367edd 100644
--- a/Lib/email/header.py
+++ b/Lib/email/header.py
@@ -283,7 +283,12 @@ class Header:
# character set, otherwise an early error is thrown.
output_charset = charset.output_codec or 'us-ascii'
if output_charset != _charset.UNKNOWN8BIT:
- s.encode(output_charset, errors)
+ try:
+ s.encode(output_charset, errors)
+ except UnicodeEncodeError:
+ if output_charset!='us-ascii':
+ raise
+ charset = UTF8
self._chunks.append((s, charset))
def encode(self, splitchars=';, \t', maxlinelen=None, linesep='\n'):