Sie wollen wahrscheinlich für eine MIME-Handling-Framework zu suchen, aber ich suchte online und kam mit nichts, so....
Ich konnte online kein Beispiel finden, deshalb zeige ich hier nur den Algorithmus. Es ist nicht das beste Beispiel, da ich von einer großen Annahme ausgehe. Nämlich, dass die Zeichenfolge immer UTF-8 Q-kodiert ist.
Die Q-Kodierung ist wie die URL-Kodierung (Prozentkodierung), die Foundation's NSString
bietet bereits Unterstützung für die Dekodierung. Der einzige (praktische) Unterschied bei der Dekodierung (bei der Kodierung gibt es größere Unterschiede) ist, dass %
Kodierungen sind =
Kodierungen zu verwenden.
Dann gibt es da noch den Lead-in und Lead-out Kram. Jeder kodierte Block hat das Format =?charset-name?encoding-type? ... encoded string here ... ?=
. Sie sollten wirklich den Zeichensatznamen lesen, wenn Sie diese Kodierung verwenden, und Sie sollten wirklich den Kodierungstyp lesen, da er "Q" oder "B" (Base64) sein kann.
Dieses Beispiel funktioniert nur für Q-Encoding (eine Untermenge von quoted-printable). Sie sollten jedoch in der Lage sein, es leicht zu ändern, um die verschiedenen Zeichensätze und die Base64-Kodierung zu verarbeiten.
#import <Foundation/Foundation.h>
int main(void) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *encodedString = @"=?UTF-8?Q?=C3=ABst=C3=A9_=C3=A9_=C3=BAm_n=C3=B4m=C3=A9?= =?UTF-8?Q?_a=C3=A7ent=C3=BAad=C3=B5.xlsx?=";
NSScanner *scanner = [NSScanner scannerWithString:encodedString];
NSString *buf = nil;
NSMutableString *decodedString = [[NSMutableString alloc] init];
while ([scanner scanString:@"=?UTF-8?Q?" intoString:NULL]
|| ([scanner scanUpToString:@"=?UTF-8?Q?" intoString:&buf] && [scanner scanString:@"=?UTF-8?Q?" intoString:NULL])) {
if (buf != nil) {
[decodedString appendString:buf];
}
buf = nil;
NSString *encodedRange;
if (![scanner scanUpToString:@"?=" intoString:&encodedRange]) {
break; // Invalid encoding
}
[scanner scanString:@"?=" intoString:NULL]; // Skip the terminating "?="
// Decode the encoded portion (naively using UTF-8 and assuming it really is Q encoded)
// I'm doing this really naively, but it should work
// Firstly I'm encoding % signs so I can cheat and turn this into a URL-encoded string, which NSString can decode
encodedRange = [encodedRange stringByReplacingOccurrencesOfString:@"%" withString:@"=25"];
// Turn this into a URL-encoded string
encodedRange = [encodedRange stringByReplacingOccurrencesOfString:@"=" withString:@"%"];
// Remove the underscores
encodedRange = [encodedRange stringByReplacingOccurrencesOfString:@"_" withString:@" "];
[decodedString appendString:[encodedRange stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
}
NSLog(@"Decoded string = %@", decodedString);
[decodedString release];
[pool drain];
return 0;
}
Diese Ausgaben:
chrisbook-pro:~ chris$ ./qp-decode 2010-12-01 18:54:42.903 qp-decode[9643:903] Dekodierter String = ësté é úm nômé açentúadõ.xlsx
0 Stimmen
Für diejenigen, die neugierig waren, wie ich: de.wikipedia.org/wiki/MIME#Encoded-Word
0 Stimmen
Diese Kodierung ist bekannt als Zitiert-druckbar .
0 Stimmen
Haben Sie diese Kopfzeile im Web (d. h. auf einer HTTP-Ressource) gesehen? Sie sollten eigentlich nicht quoted-printable verwenden...