# HG changeset patch # User Paul Boddie # Date 1224196832 -7200 # Node ID 97d39ea15ccf791834c54b143625e4cd52c1f0cc # Parent 09250e78af5e1f0a4e1df94c686ff3a6799d8fcf Fixed value decoding, performing character substitutions before explicitly specified decoding operations. diff -r 09250e78af5e -r 97d39ea15ccf vContent.py --- a/vContent.py Thu Oct 16 21:55:30 2008 +0200 +++ b/vContent.py Fri Oct 17 00:40:32 2008 +0200 @@ -223,25 +223,28 @@ # Decode the value. - value = self.decode("".join(value_lines), parameters.get("ENCODING")) + value = self.decode("".join(value_lines), parameters) return name, parameters, value - def decode(self, value, encoding): + def decode(self, value, parameters): + + "Decode the 'value' using the given 'parameters'." - "Decode the 'value' with the given 'encoding'." + encoding = parameters.get("ENCODING") + charset = parameters.get("CHARSET") - # NOTE: Assuming ISO 8869-1 for the character set. + # NOTE: Introducing newline conversions. + # Replace quoted characters (see 4.3.11 in RFC 2445). + + value = value.replace("\r", "").replace("\\N", "\n").replace("\\n", "\n").replace("\\,", ",").replace("\\;", ";") if encoding == "QUOTED-PRINTABLE": - return unicode(quopri.decodestring(value), "iso-8859-1") + return unicode(quopri.decodestring(value), charset or "iso-8859-1") elif encoding == "BASE64": return base64.decodestring(value) else: - # NOTE: Introducing newline conversions. - # Replace quoted characters (see 4.3.11 in RFC 2445). - - return value.replace("\r", "").replace("\\N", "\n").replace("\\n", "\n").replace("\\,", ",").replace("\\;", ";") + return value class Parser: