2

「\n」で区切られた多くの行を含むファイルがあります。行の1つは次のとおりです。

Christian Grundekjøn

行を削除しないとファイルを読み取ることができません。次のコードを使用して、1行ずつ読み取ります。

for (NSString *line in [[NSString stringWithContentsOfFile:fileName encoding:NSUTF8StringEncoding error:NULL] componentsSeparatedByString:@"\n"])

行を削除しないと、コードはforループにまったく入りません。何も読まれませんでした。英語以外の文字を処理する方法は?

4

3 に答える 3

2

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

于 2012-06-10T08:50:28.163 に答える
1

日本語の文字に問題がありました。私の解決策は、ファイルをdocディレクトリに保存するときでした

NSString *fileData = [NSString stringWithFormat:@"%@", noteContent];
BOOL isWriteToFile = [fileData writeToFile:notePath atomically:YES encoding:NSUTF8StringEncoding error:nil];

ファイル内容の読み込み時

[[NSString alloc] initWithContentsOfFile:fullNotePath usedEncoding:nil error:nil];
于 2012-06-10T09:18:41.303 に答える
0

ファイルにデータをUnicode形式で保存するか、特殊文字をUnicode形式で保存することもできます。

于 2012-06-10T07:16:21.593 に答える