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 は非常にうまく機能します。しかし、エンコーディングを理解しようとするのが非常に難しい場合があります。それはすべてソースファイルに依存します。