From 2cd7b7a463cbd1f96a614e58d93cf3690ea65259 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 17 Nov 2006 22:07:57 +0000 Subject: [PATCH] Monotone-Parent: f89606284edb167179a499cd095ed71483dc5e1b Monotone-Revision: 0cdd246c0f5539b89fd7637c0d0589c8383fe4df Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2006-11-17T22:07:57 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 6 ++++++ SoObjects/Mailer/SOGoMailObject.m | 33 ++++++++++++++++++++----------- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0b3264b1d..7e0c4236f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-11-17 Wolfgang Sourdeau + + * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject + -stringForData:partInfo:]): take the encoding into account and + translate the text to "normal" before processing the charset data. + 2006-11-15 Wolfgang Sourdeau * UI/WebServerResources/generic.js: the progress indicator is on diff --git a/SoObjects/Mailer/SOGoMailObject.m b/SoObjects/Mailer/SOGoMailObject.m index 784e62471..fca056121 100644 --- a/SoObjects/Mailer/SOGoMailObject.m +++ b/SoObjects/Mailer/SOGoMailObject.m @@ -570,23 +570,34 @@ static BOOL debugSoParts = NO; /* convert parts to strings */ - (NSString *)stringForData:(NSData *)_data partInfo:(NSDictionary *)_info { - NSString *charset; - NSString *s; + NSString *charset, *encoding, *s; + NSData *mailData; if (![_data isNotNull]) return nil; s = nil; + + encoding = [[_info objectForKey:@"encoding"] lowercaseString]; + + if ([encoding isEqualToString: @"7bit"] + || [encoding isEqualToString: @"8bit"]) + mailData = _data; + else if ([encoding isEqualToString: @"base64"]) + mailData = [_data dataByDecodingBase64]; + else if ([encoding isEqualToString: @"quoted-printable"]) + mailData = [_data dataByDecodingQuotedPrintable]; - charset = [[_info valueForKey:@"parameterList"] valueForKey:@"charset"]; - if ([charset isNotNull] && [charset length] > 0) - s = [NSString stringWithData:_data usingEncodingNamed:charset]; - - if (s == nil) { /* no charset provided, fall back to UTF-8 */ - s = [[NSString alloc] initWithData:_data encoding:NSUTF8StringEncoding]; - s = [s autorelease]; - } - + charset = [[_info valueForKey:@"parameterList"] valueForKey: @"charset"]; + if (![charset length]) + { + s = [[NSString alloc] initWithData:mailData encoding:NSUTF8StringEncoding]; + [s autorelease]; + } + else + s = [NSString stringWithData: mailData + usingEncodingNamed: charset]; + return s; }