2012-05-15 15 views
0

我們正在爲實現NNTP協議的iOS5開發一個簡單的usenet讀取器。將NSString轉換爲不同的字符集

不幸的是,我們有一些問題與編碼:一個頭部可能看起來像:

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

是否有在Objective-C一些簡單的方法來轉換包含=?ISO-8859-15?Q?Pr=FCfungsmodus?=爲「Prüfungsmodus」一個的NSString?

感謝

編輯:

嗯。我不知道如果我得到這個權利: 你的意思是這樣的:

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:字段總是看起來一樣(除了日語等編碼...)

回答

0

如果從第一原理這樣做你自己,然後在輪廓:

  • 從網絡讀取的字節數
  • 確定一個特定的編碼每次運行的範圍 - 在你的榜樣,你正在尋找=?...?=節[這看起來像MIME字編碼] - 對於每個範圍,你需要字節指針,長度,編碼[這可能是一個字符集和一個單獨的編碼風格,在這裏看起來像ISO-8859- 15用Q編碼]
  • 創建一個NSString爲每個使用- (id)initWithBytes:(const void *)bytes length:(NSUInteger)length encoding:(NSStringEncoding)encoding

  • 連接

  • 您還需要處理輸入中的其他轉義序列,例如,當輸入包含文字=?

有關MIME看維基百科的詳細信息。

[編輯:在MIME添加筆記]

+0

我不知道,如果我得到這個權利 - 見編輯。 – dominik

+0

@dominik - 您的編輯只是使用相同的字符集進行編碼和解碼...從網絡中讀取的原始字節開始(您可能將其作爲「NSData」) - 您將獲得一個指向原始字節和數字的指針的字節),不要將它們轉換爲字符串。現在確定特定編碼中的每個字節運行並將該運行的字節轉換爲字符串,然後連接結果字符串以產生最終結果。 – CRD

+0

謝謝你的幫助。我也嘗試過,使用每一個可用的編碼。結果將保持不變。 (請參閱編輯2).. – dominik

相關問題