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; }