mirror of
https://github.com/python/cpython.git
synced 2025-07-31 15:14:22 +00:00
Forward port some fixes that were in email 2.5 but for some reason didn't make
it into email 4.0. Specifically, in Message.get_content_charset(), handle RFC 2231 headers that contain an encoding not known to Python, or a character in the data that isn't in the charset encoding. Also forward port the appropriate unit tests.
This commit is contained in:
parent
9815f8b252
commit
d92ae78bdb
3 changed files with 100 additions and 1 deletions
|
@ -747,7 +747,18 @@ class Message:
|
|||
if isinstance(charset, tuple):
|
||||
# RFC 2231 encoded, so decode it, and it better end up as ascii.
|
||||
pcharset = charset[0] or 'us-ascii'
|
||||
charset = unicode(charset[2], pcharset).encode('us-ascii')
|
||||
try:
|
||||
# LookupError will be raised if the charset isn't known to
|
||||
# Python. UnicodeError will be raised if the encoded text
|
||||
# contains a character not in the charset.
|
||||
charset = unicode(charset[2], pcharset).encode('us-ascii')
|
||||
except (LookupError, UnicodeError):
|
||||
charset = charset[2]
|
||||
# charset character must be in us-ascii range
|
||||
try:
|
||||
charset = unicode(charset, 'us-ascii').encode('us-ascii')
|
||||
except UnicodeError:
|
||||
return failobj
|
||||
# RFC 2046, $4.1.2 says charsets are not case sensitive
|
||||
return charset.lower()
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue