Чтение файла UTF-16 в основные данные - PullRequest
0 голосов
/ 11 августа 2011

У меня есть csv-файл, который содержит utf-16, содержащий тамильские символы, и отображается нормально, когда я его просматриваю.Я прочитал его в свою программу iphone / ipad и создал из него базу данных основных данных.У меня проблема в том, что информация хранится в основной базе данных в другом наборе символов.Как мне указать использование UTF16StringEncoding при создании базы данных из CSV?Вот мой метод загрузки:

- (void)setupQuestions {
NSString *paths = [[NSBundle mainBundle] resourcePath];
NSString *bundlePath = [paths stringByAppendingPathComponent:@"questions_tm.csv"];
NSString *dataFile = [[NSString alloc] initWithContentsOfFile:bundlePath];
NSArray *dataRows = [dataFile componentsSeparatedByString:@"\n"];
[dataFile release];

//Question *card;
for (int i = 0 ; i < [dataRows count] ; i++)
{
    NSArray *dataElements = [[dataRows objectAtIndex:i] componentsSeparatedByString:@","];
    if ([dataElements count] >= 1)
    {
        card = (Question *)[NSEntityDescription insertNewObjectForEntityForName:@"Question" inManagedObjectContext:[self managedObjectContext]];
        NSLog(@"Row ID: %i", i);
        card.ID = [NSNumber numberWithInt:i];
        card.answer = [NSNumber numberWithInt:[[dataElements objectAtIndex:1] intValue]];
        card.question = [dataElements objectAtIndex:2];
        card.optionA = [dataElements objectAtIndex:3];
        card.optionB = [dataElements objectAtIndex:4];
        card.optionC = [dataElements objectAtIndex:5];
        card.optionD = [dataElements objectAtIndex:6];


        [self save];
    }
}

}

1 Ответ

0 голосов
/ 11 августа 2011

Предполагая, что card.question - это NSString, который вы хотите ввести в UTF16StringEncoding, у вас есть как минимум следующие две опции:

NSString* question = [dataElements objectAtIndex:2];
const char * questionCString = [question cStringUsingEncoding:NSUTF16StringEncoding];
card.question = [[[NSString alloc] initWithCString:questionCString encoding:UTF16StringEncoding] autorelease];

Опция 2:

NSString* question = [dataElements objectAtIndex:2];
NSData* questionData = [question dataUsingEncoding:NSUTF16StringEncoding];
card.question = [[[NSString alloc] initWithData:questionData encoding:UTF16StringEncoding] autorelease];
...