2013-03-17 2 views
2

Вот мой код и журналы, то это будет более эффективным, чем длинная речь :)символов Unicode в NSString

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

LOG: категория:: Boissons Фра чес:

И после того, Я получаю это исключение: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSString stringWithUTF8String:]: NULL cString'

Я просто хочу преобразовать строки типа «Boissons fra? Ches» в «Boissons fraîches». Как я могу сделать ?

EDIT

Я просто хочу, чтобы получить содержимое файла 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]; 
} 
+0

Посмотрите здесь: http://macresearch.org/cocoa-scientists-part-xxvi-parsing-csv-data –

+0

Какая кодировка является фактическим CSV-файлом? Попробуйте 'NSUTF8StringEncoding', если вы этого не знаете. Или попробуйте запустить команду 'file' в файле из командной строки. Это должно показать вам кодировку файла. – rmaddy

+1

Вы загрузили файл, используя 'NSASCIIStringEncoding'. Если файл действительно ASCII, то он не может правильно представлять «Boissons fraîches», и данные были потеряны. Однако я подозреваю, что файл не ASCII. Вы должны выяснить, какая кодировка была использована для создания файла. Если это исходит из программы, мы надеемся, что эта программа документирует используемую им кодировку. –

ответ

1

: C строка преобразования терпит неудачу, потому что у вас есть символ в исходной строке, которая не может быть представлена, по умолчанию C струнной кодировке (которая MacRoman, старше 8-битная кодировка аналогична ISO Latin-1.)

Я не совсем уверен, что вы пытаетесь сделать, но [NSString defaultCStringEncoding] почти никогда не кодирует, что вы хотите использовать. Если вы можете уточнить, я мог бы предложить другой подход к проблеме.

+0

Я отредактировал свой вопрос, чтобы уточнить свою цель. Спасибо за вашу помощь. – Seb

+0

Я просто хочу преобразовать свою строку со странными символами в обычную и читаемую строку. – Seb

1

Вместо использования NSASCIIStringEncoding в [NSString stringWithContentsOfFile:filePath encoding:NSASCIIStringEncoding error:&error] вам необходимо узнать кодировку текстового файла и использовать соответствующее значение перечисления.

Смежные вопросы