如果您從iOS內部生成文本文件,那麼您需要確保使用NSUTF8StringEncoding對其進行了編碼。但鑑於你所報告的問題,我懷疑你可能從另一個來源獲取數據,並且該來源沒有將文本編碼爲UTF8。如果是這種情況,您可能能夠解決您的應用程序外的問題,但將源文件轉換爲UTF8。
如果您不知道使用什麼編碼,例如由於用戶提供了該文件,因此iOS可以嘗試爲您猜測它。我已成功使用的模式是首先嚐試使用UTF8編碼獲取字符串,例如使用您使用的相同方法。假設你寫一個方法,對此你傳遞一個文件名,以獲取字符串類似以下內容:
- (NSString*) stringFromFile: (NSString*) filePath;
{
NSError* error = nil;
NSString* stringFromFile = [NSString stringWithContentsOfFile: fileName
encoding: NSUTF8StringEncoding
error: &error];
if (stringFromFile) return stringFromFile; // success
NSLog(@"String is not UTF8 encoded. Error: %@", [error localizedDescription]);
NSStringEncoding encoding = 0;
NSError* usedEncodingError = nil;
NSString* stringFromFile = [NSString stringWithContentsOfFile: path
usedEncoding: &encoding
error: &usedEncodingError];
if (stringFromFile)
{
NSLog(@"Retrieved string using an alternative encoding. Encoding was: %d", encoding);
return stringFromFile;
}
// either handle error or attempt further explicit unencodings here
return nil;
}
在許多情況下,usedEncoding工作得很好。但有些邊緣情況下,試圖找出編碼可能非常棘手。這一切都取決於源文件。
是什麼結果「[:文件名編碼:NSUTF8StringEncoding錯誤NULL的NSString stringWithContentsOfFile]」我的解決辦法問題 –
是的,這聽起來像你的文件實際上不是UTF-8。 – Wevah