如果您从 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 效果很好。但是在某些极端情况下,试图找出编码可能非常棘手。这一切都取决于源文件。