3

这是我的代码和日志,它会比长篇大论更有效率:)

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

日志 : 类别 : : 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

C 字符串转换失败,因为原始字符串中有一个字符无法以默认 C 字符串编码(即 MacRoman,一种类似于 ISO Latin-1 的较旧的 8 位编码)表示。

我不完全确定您要做什么,但[NSString defaultCStringEncoding]几乎从来都不是您要使用的编码。如果您能详细说明,我也许可以提供另一种解决问题的方法。

于 2013-03-17T19:04:20.870 回答
1

Instead of using NSASCIIStringEncoding in [NSString stringWithContentsOfFile:filePath encoding:NSASCIIStringEncoding error:&error], you need to find out the encoding of the text file and use the appropriate enum value.

于 2013-03-17T20:29:02.000 回答