おそらく、MIME処理フレームワークを検索したいが、私は
オンラインで検索して何を思い付いたので....私はオンラインの例を見つけることができなかったので、私はちょうど示しますよここでアルゴリズム。私は大きな前提をしているので、これは最良の例ではありません。それは文字列が常にUTF-8でQコード化されていることです。
Qエンコーディングは、FoundationのNSString
が既にデコードをサポートしているURLエンコーディング(パーセントエンコーディング)に似ています。デコード時(エンコード時に大きな違いがあります)の唯一の(実際的な)違いは、%
エンコードが=
エンコードであることです。
次に、リードインとリードアウトがあります。各符号化ブロックのフォーマットは=?charset-name?encoding-type? ... encoded string here ... ?=
です。あなたは本当に文字セット名がそのエンコーディングを使用していることを読んで、 "Q"または "B"(Base64)かもしれないので、エンコーディングタイプを本当に読んでください。
この例は、Qエンコーディング(quoted-printableのサブセット)でのみ機能します。異なる文字セットを扱い、Base64エンコーディングを扱うためには簡単に変更できるはずです。
#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;
}
この出力:
chrisbook-プロ:54:42.903 QP-デコード[9643:903]〜クリス・$は 2010-12-01 18 ./qp-decodeデコードされた文字列を=エステéumのノームaçentúadõ.xlsxNSStringのパーセントエスケープを含むトリックを使用して、ここで簡単に/成功した方法を作成しまし
好きな人のために、私のように:http://en.wikipedia.org/wiki/MIME#Encoded-Word –
このエンコーディングは[Quoted-Printable](http://tools.ietf.org)として知られています。 /html/rfc2045#section-6.7)。 – Gumbo
このヘッダーはウェブ上(HTTPリソース上)に見えましたか?彼らは実際に引用符付きの印刷可能なものを使用すべきではありません... –