0

NNTPプロトコルを実装するiOS5用のシンプルなUsenetリーダーを開発しています。

残念ながら、エンコーディングに問題があります。ヘッダーは次のようになります。

Subject: Re: [GA] =?ISO-8859-15?Q?Pr=FCfungsmodus?= 
Date: 22 Apr 2012 22:50:38 +0200

=?ISO-8859-15?Q?Pr=FCfungsmodus?= Objective-Cに" "を含むNSStringを変換する簡単な方法はありPrüfungsmodusますか?

ありがとう

編集:

うーん。私がこれを正しく理解したかどうかはわかりません:あなたは次のような意味でした:

NSRange range = [input rangeOfString:@"=?"];
NSRange range2 = [input rangeOfString:@"?="];

NSString *string_to_decode = [input substringWithRange:NSMakeRange(range.location, range2.location-(range.location-2))];


NSData *data = [string_to_decode dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:YES];

NSString *converted = [[NSString alloc] initWithData:data encoding:(NSISOLatin1StringEncoding)];

それが機能していないので..

EDIT2 生のバイトを変換しようとしています:

uint8_t buffer[1024];
iStream read:buffer maxLength:sizeof(buffer)
NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSISOLatin1StringEncoding];

ここでどのエンコーディングを選択しても、Subject:フィールドは常に同じように見えます(日本語などのエンコーディングを除く...)

4

1 に答える 1

0

これを最初の原則から自分で行っている場合は、概要を説明します。

  • ネットワークからバイトを読み取ります
  • 特定のエンコーディングでの各実行の範囲を決定します-あなたが探している例では=?...?=セクション[これはMIMEワードエンコーディングのように見えます]-各範囲について、バイトポインタ、長さ、エンコーディングが必要です[文字セットと個別のエンコードスタイルの両方である必要があります。ここでは、Qエンコードを使用したISO-8859-15のように見えます]
  • NSStringを使用してそれぞれを作成します- (id)initWithBytes:(const void *)bytes length:(NSUInteger)length encoding:(NSStringEncoding)encoding

  • 連結

  • また、入力にリテラルが含まれている場合など、入力内の他のエスケープシーケンスを処理する必要があります。=?

MIMEの詳細については、ウィキペディアを参照してください。

[編集:MIMEに関するメモを追加しました。]

于 2012-05-15T19:26:50.057 に答える