Objective-C中的Mime编码的Word解析 [英] Mime Encoded-Word parsing in Objective-C
本文介绍了Objective-C中的Mime编码的Word解析的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
=?iso-8859-1?Q?= A1Hola,_se = F1or!?=
或者,是否有一个已知的开源库?
解决方案
我拿了@ NickolayO的 answer ,添加了基础64支持与 QSStrings ,并缩短代码使用 componentsSeparatedByString:
和 stringByReplacingOccurrencesOfString:withString:
。
我已将代码提供给 GitHub 。这是一个方便的代码片段:
@implementation NSString(MimeEncodedWord)
- (BOOL)isMimeEncodedWord
{
return [self hasPrefix:@=?]&& [self hasSuffix:@?=];
}
+(NSString *)stringWithMimeEncodedWord:(NSString *)word
{//示例:=?iso-8859-1?Q?= A1Hola,_se = !?=
NSArray * components = [word componentsSeparatedByString:@?];
if(components.count< 5)return nil;
NSString * charset = [components objectAtIndex:1];
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef)charset)); // TODO:如果编码无效,会发生什么?
NSString * encodingType = [components objectAtIndex:2];
NSString * encodedText = [components objectAtIndex:3];
if([encodingType isEqualToString:@Q])
{// quoted-printable
encodedText = [encodedText stringByReplacingOccurrencesOfString:@_withString:@];
encodedText = [encodedText stringByReplacingOccurrencesOfString:@=withString:@%];
NSString * decoded = [encodedText stringByReplacingPercentEscapesUsingEncoding:encoding];
返回解码;
} else if([encodingType isEqualToString:@B])
{// base64
NSData * data = [QSStrings decodeBase64WithString:encodedText];
NSString * decoded = [[NSString alloc] initWithData:data encoding:encoding];
返回解码;
} else {
NSLog(@%@不是有效的编码(必须是Q或B),encodingType);
return nil;
}
}
@end
Do OS X or iOS provide an API to parse MIME Encoded-Word? These lovely strings:
=?iso-8859-1?Q?=A1Hola,_se=F1or!?=
Alternatively, is there a known open-source library that does this?
解决方案
I took @NickolayO.'s answer, added base-64 support with QSStrings and shortened the code by using componentsSeparatedByString:
and stringByReplacingOccurrencesOfString:withString:
.
I've made the code available on GitHub. Here's a snippet for convenience:
@implementation NSString (MimeEncodedWord)
- (BOOL) isMimeEncodedWord
{
return [self hasPrefix:@"=?"] && [self hasSuffix:@"?="];
}
+ (NSString*) stringWithMimeEncodedWord:(NSString*)word
{ // Example: =?iso-8859-1?Q?=A1Hola,_se=F1or!?=
NSArray *components = [word componentsSeparatedByString:@"?"];
if (components.count < 5) return nil;
NSString *charset = [components objectAtIndex:1];
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef)charset)); // TODO: What happens if the encoding is invalid?
NSString *encodingType = [components objectAtIndex:2];
NSString *encodedText = [components objectAtIndex:3];
if ([encodingType isEqualToString:@"Q"])
{ // quoted-printable
encodedText = [encodedText stringByReplacingOccurrencesOfString:@"_" withString:@" "];
encodedText = [encodedText stringByReplacingOccurrencesOfString:@"=" withString:@"%"];
NSString *decoded = [encodedText stringByReplacingPercentEscapesUsingEncoding:encoding];
return decoded;
} else if ([encodingType isEqualToString:@"B"])
{ // base64
NSData *data = [QSStrings decodeBase64WithString:encodedText];
NSString *decoded = [[NSString alloc] initWithData:data encoding:encoding];
return decoded;
} else {
NSLog(@"%@ is not a valid encoding (must be Q or B)", encodingType);
return nil;
}
}
@end
这篇关于Objective-C中的Mime编码的Word解析的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文