mirror of
https://github.com/python/cpython.git
synced 2024-11-23 18:04:37 +08:00
#19957: Simplify encode_7or8bit now that _payload is always str.
Patch by Vajrasky Kok, test enhancement by me.
This commit is contained in:
parent
cd0cb8ccd3
commit
775632ba10
@ -54,21 +54,12 @@ def encode_7or8bit(msg):
|
||||
# There's no payload. For backwards compatibility we use 7bit
|
||||
msg['Content-Transfer-Encoding'] = '7bit'
|
||||
return
|
||||
# We play a trick to make this go fast. If encoding/decode to ASCII
|
||||
# succeeds, we know the data must be 7bit, otherwise treat it as 8bit.
|
||||
# We play a trick to make this go fast. If decoding from ASCII succeeds,
|
||||
# we know the data must be 7bit, otherwise treat it as 8bit.
|
||||
try:
|
||||
if isinstance(orig, str):
|
||||
orig.encode('ascii')
|
||||
else:
|
||||
orig.decode('ascii')
|
||||
orig.decode('ascii')
|
||||
except UnicodeError:
|
||||
charset = msg.get_charset()
|
||||
output_cset = charset and charset.output_charset
|
||||
# iso-2022-* is non-ASCII but encodes to a 7-bit representation
|
||||
if output_cset and output_cset.lower().startswith('iso-2022-'):
|
||||
msg['Content-Transfer-Encoding'] = '7bit'
|
||||
else:
|
||||
msg['Content-Transfer-Encoding'] = '8bit'
|
||||
msg['Content-Transfer-Encoding'] = '8bit'
|
||||
else:
|
||||
msg['Content-Transfer-Encoding'] = '7bit'
|
||||
|
||||
|
@ -765,8 +765,15 @@ class TestEncoders(unittest.TestCase):
|
||||
# whose output character set is 7bit gets a transfer-encoding
|
||||
# of 7bit.
|
||||
eq = self.assertEqual
|
||||
msg = MIMEText('文', _charset='euc-jp')
|
||||
msg = MIMEText('文\n', _charset='euc-jp')
|
||||
eq(msg['content-transfer-encoding'], '7bit')
|
||||
eq(msg.as_string(), textwrap.dedent("""\
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset="iso-2022-jp"
|
||||
Content-Transfer-Encoding: 7bit
|
||||
|
||||
\x1b$BJ8\x1b(B
|
||||
"""))
|
||||
|
||||
def test_qp_encode_latin1(self):
|
||||
msg = MIMEText('\xe1\xf6\n', 'text', 'ISO-8859-1')
|
||||
|
Loading…
Reference in New Issue
Block a user