From 3c25535dc81492b8f703056dbd3b9685db4ca936 Mon Sep 17 00:00:00 2001 From: Barry Warsaw <barry@python.org> Date: Fri, 6 Sep 2002 03:55:04 +0000 Subject: [PATCH] _formatparam(), set_param(): RFC 2231 encoding support by Oleg Broytmann in SF patch #600096. Specifically, the former function now encodes the triplets, while the latter adds optional charset and language arguments. --- Lib/email/Message.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Lib/email/Message.py b/Lib/email/Message.py index 0a8d90be7a..326d0b82f2 100644 --- a/Lib/email/Message.py +++ b/Lib/email/Message.py @@ -38,8 +38,9 @@ def _formatparam(param, value=None, quote=1): # are (charset, language, value). charset is a string, not a Charset # instance. if isinstance(value, TupleType): - # Convert to ascii, ignore language - value = unicode(value[2], value[0]).encode("ascii") + # Encode as per RFC 2231 + param += '*' + value = Utils.encode_rfc2231(value[2], value[0], value[1]) # BAW: Please check this. I think that if quote is set it should # force quoting even if not necessary. if quote or tspecials.search(value): @@ -543,7 +544,8 @@ class Message: return v return failobj - def set_param(self, param, value, header='Content-Type', requote=1): + def set_param(self, param, value, header='Content-Type', requote=1, + charset=None, language=''): """Set a parameter in the Content-Type: header. If the parameter already exists in the header, its value will be @@ -556,7 +558,13 @@ class Message: An alternate header can specified in the header argument, and all parameters will be quoted as appropriate unless requote is set to a false value. + + If charset is specified the parameter will be encoded according to RFC + 2231. In this case language is optional. """ + if not isinstance(value, TupleType) and charset: + value = (charset, language, value) + if not self.has_key(header) and header.lower() == 'content-type': ctype = 'text/plain' else: -- 2.40.0