2014-10-06 118 views
0

在我的程序上,我收到一個NSData,其中有一個字符串有時用UTF8編碼,其他時間用Latin1編碼。有沒有辦法自動檢測哪個編碼正在被使用? 我試圖將它寫入文件,因此我可以使用stringWithContentsOfFile:usedEncoding:error:,但它總是以UTF8響應。自動NSEncoding檢測

[receivedData writeToFile:path atomically:YES]; 
NSError *error = nil; 
Debug(@"Write returned error: %@", [error localizedDescription]); 
NSStringEncoding enc; 
NSString *content=[NSString stringWithContentsOfFile:path usedEncoding:&enc error:&error]; 

也許我沒有正確理解我應該如何處理這個問題,但是從我讀過stringWithContentsOfFile:usedEncoding:error:應該要走的路。有什麼我在做什麼錯誤或如何處理這個建議?

回答

0

您可以從響應中獲取編碼。 (例如NSURLResponse,NSHTTPURLResponse ...)

NSStringEncoding stringEncoding = NSUTF8StringEncoding; 
    if (response.textEncodingName) { 
     CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)response.textEncodingName); 
     if (encoding != kCFStringEncodingInvalidId) { 
      stringEncoding = CFStringConvertEncodingToNSStringEncoding(encoding); 
     } 
    } 
0

這是一個很好的機會,你的文字實際上只包含ASCII字符,所以它無法區分所用的編碼是否是UTF-8或拉美的一些編碼。在這種情況下,您很可能會被告知「這是UTF-8」。

要正確測試這個,你必須說服服務器使用拉丁編碼發送類似於ÄÜÜ的東西。 (如果它不是UTF-8,那麼猜測使用哪種編碼也很困難,因爲通常很多8位編碼可能是有效的)。