3

これが私のコードとログです。長いスピーチよりも効率的です:)

NSString* cat = [categories objectAtIndex:i];
NSLog(@"category : :%@:", cat);
NSString* decodedString = [NSString stringWithUTF8String:[cat cStringUsingEncoding:[NSString defaultCStringEncoding]]];
NSLog(@"category decoede : %@", decodedString);

LOG : カテゴリ : :Boissons fra?ches:

その後、次の例外が発生します。*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSString stringWithUTF8String:]: NULL cString'

「Boissons fraîches」の「Boissons fraîches」のような文字列を変換したいだけです。どのようにできるのか ?

編集

CSVファイルの内容を取得したいだけです。私の完全なコードは次のとおりです。

// Getting content of CSV file
NSError* error;
NSString* filePath = [[NSBundle mainBundle] pathForResource:@"categories" ofType:@"csv"];
NSString* data = [NSString stringWithContentsOfFile:filePath encoding:NSASCIIStringEncoding error:&error];
NSArray* categories = [data componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];

for (int i = 0; i < categories.count; ++i) {
    NSString* cat = [categories objectAtIndex:i];
    NSLog(@"categorie : :%@:", [categories objectAtIndex:i]);
    NSString* decodedString = [NSString stringWithUTF8String:[cat cStringUsingEncoding:[NSString defaultCStringEncoding]]];
    NSLog(@"categorie : %@", decodedString);
    [self.categories addObject:decodedString];
}
4

2 に答える 2

1

NSASCIIStringEncodinginを使用する代わりに[NSString stringWithContentsOfFile:filePath encoding:NSASCIIStringEncoding error:&error]、テキスト ファイルのエンコーディングを調べて、適切な列挙値を使用する必要があります。

于 2013-03-17T20:29:02.000 に答える
1

デフォルトの C 文字列エンコーディング (ISO Latin-1 に似た古い 8 ビット エンコーディングである MacRoman) で表現できない文字が元の文字列に含まれているため、C 文字列変換が失敗しています。

あなたが何をしようとしているのかは完全にはわかりませんが[NSString defaultCStringEncoding]、使用したいエンコーディングになることはほとんどありません。詳しく説明していただければ、問題に対する別のアプローチを提供できるかもしれません。

于 2013-03-17T19:04:20.870 に答える