2013-07-24 40 views
2

我只是想知道是否有任何現有的類別或任何類型的函數將返回我NSStringEncoding常量超出NSURLResponse對象。從NSURLResponse中檢測NSStringEncoding的函數?

我現在面臨的問題是當我將編碼硬編碼爲NSUTF8StringEncoding時,當我將Web服務響應數據轉換爲String時,實際上會導致問題,因爲我的Web服務有時會返回以UTF8編碼的響應,有時用ASCII編碼(雖然我不太清楚所有的編碼,但是有時候在日語,中文等其他語言字符中)

所以我的想法是在NSURLResponse上有一個類別來檢測編碼並返回 例如。

NSURLResponse * response = // NSURLResponse object (web service response headers) 
NSData * responseData = // NSData object (web service response data) 
NSStringEncoding encoding = [response stringEncodingUsed]; 
NSString * responseText = [[NSString alloc]initWithData:responseData encoding:encoding]; 
+0

那麼我知道如何看到urlResponse中的編碼頭,然後檢測正確的編碼,但我希望有人可能已經寫了這種功能。 –

+1

看看http://stackoverflow.com/questions/5268661/how-to-detect-text-file-encoding-in-objective-c(但它需要你先將數據寫入文件)。 –

回答

8

有一個更好的方法。

您可以從URLResponse獲取編碼名稱作爲字符串,然後搜索相應的NSStringEncoding。

NSString *encodingName = [aURLResponse textEncodingName]; 
NSStringEncoding encodingType = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef)encodingName)); 

而且encodingName可能是零,如果對於所提供的encodingName沒有適當的結果爲encodingType變量的結果值將是無效的。