mirror of
				https://github.com/python/cpython.git
				synced 2025-10-28 12:15:13 +00:00 
			
		
		
		
	 7d93221a5c
			
		
	
	
		7d93221a5c
		
	
	
	
	
		
			
			Yukihiro Nakadaira noticed a typo in encode_7or8bit that was trying to special case iso-2022 codecs. It turns out that the code in question is never used, because whereas it was designed to trigger if the payload encoding was eight bit but its output encoding was 7 bit, in practice the payload is always converted to the 7bit encoding before encode_7or8bit is called. Patch by Shawat Anand.
		
			
				
	
	
		
			82 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Copyright (C) 2001-2006 Python Software Foundation
 | ||
| # Author: Barry Warsaw
 | ||
| # Contact: email-sig@python.org
 | ||
| 
 | ||
| """Encodings and related functions."""
 | ||
| 
 | ||
| __all__ = [
 | ||
|     'encode_7or8bit',
 | ||
|     'encode_base64',
 | ||
|     'encode_noop',
 | ||
|     'encode_quopri',
 | ||
|     ]
 | ||
| 
 | ||
| import base64
 | ||
| 
 | ||
| from quopri import encodestring as _encodestring
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| def _qencode(s):
 | ||
|     enc = _encodestring(s, quotetabs=True)
 | ||
|     # Must encode spaces, which quopri.encodestring() doesn't do
 | ||
|     return enc.replace(' ', '=20')
 | ||
| 
 | ||
| 
 | ||
| def _bencode(s):
 | ||
|     # We can't quite use base64.encodestring() since it tacks on a "courtesy
 | ||
|     # newline".  Blech!
 | ||
|     if not s:
 | ||
|         return s
 | ||
|     hasnewline = (s[-1] == '\n')
 | ||
|     value = base64.encodestring(s)
 | ||
|     if not hasnewline and value[-1] == '\n':
 | ||
|         return value[:-1]
 | ||
|     return value
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| def encode_base64(msg):
 | ||
|     """Encode the message's payload in Base64.
 | ||
| 
 | ||
|     Also, add an appropriate Content-Transfer-Encoding header.
 | ||
|     """
 | ||
|     orig = msg.get_payload()
 | ||
|     encdata = _bencode(orig)
 | ||
|     msg.set_payload(encdata)
 | ||
|     msg['Content-Transfer-Encoding'] = 'base64'
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| def encode_quopri(msg):
 | ||
|     """Encode the message's payload in quoted-printable.
 | ||
| 
 | ||
|     Also, add an appropriate Content-Transfer-Encoding header.
 | ||
|     """
 | ||
|     orig = msg.get_payload()
 | ||
|     encdata = _qencode(orig)
 | ||
|     msg.set_payload(encdata)
 | ||
|     msg['Content-Transfer-Encoding'] = 'quoted-printable'
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| def encode_7or8bit(msg):
 | ||
|     """Set the Content-Transfer-Encoding header to 7bit or 8bit."""
 | ||
|     orig = msg.get_payload()
 | ||
|     if orig is None:
 | ||
|         # 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 to ASCII succeeds, we
 | ||
|     # know the data must be 7bit, otherwise treat it as 8bit.
 | ||
|     try:
 | ||
|         orig.encode('ascii')
 | ||
|     except UnicodeError:
 | ||
|         msg['Content-Transfer-Encoding'] = '8bit'
 | ||
|     else:
 | ||
|         msg['Content-Transfer-Encoding'] = '7bit'
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| def encode_noop(msg):
 | ||
|     """Do nothing."""
 |