Iphone 将UTF-16文件读入核心数据

Iphone 将UTF-16文件读入核心数据,iphone,ios,ipad,core-data,utf-16,Iphone,Ios,Ipad,Core Data,Utf 16,我有一个csv文件,它是utf-16,包含泰米尔字符,在我查看时显示良好。我把它读入我的iphone/ipad程序,并从中创建一个核心数据数据库。我遇到的问题是,信息以另一个字符集存储在核心数据库中。从csv构建数据库时,如何指定使用UTF16StringEncoding?以下是我的加载方法: - (void)setupQuestions { NSString *paths = [[NSBundle mainBundle] resourcePath]; NSString *bundlePath

我有一个csv文件,它是utf-16,包含泰米尔字符,在我查看时显示良好。我把它读入我的iphone/ipad程序,并从中创建一个核心数据数据库。我遇到的问题是,信息以另一个字符集存储在核心数据库中。从csv构建数据库时,如何指定使用UTF16StringEncoding?以下是我的加载方法:

- (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];
    }
}
}

假设card.question是UTF16StringEncoding中所需的NSString,则至少有以下两个选项:

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];

我试着使用选项2。注意:在UTF16StringEncoding前面添加NS。它对我来说是有意义的,但不起作用。我进入sqlite浏览器,注意到数据库的编码是UTF-8。我将如何更改Xcode对其进行编码的方式?如果数据库不存在,我就在程序中创建它。我还怀疑我没有告诉项目使用什么编码。我进入了Xcode首选项,并将其从UTF-8更改为UTF-16,但我不确定现有项目更改其字符集编码所需做的一切。感谢“NS”。编辑了我的答案。您所说的db的UTF-8编码是什么意思?有一个问题,当您从数据库获取数据时,是否不可能将数据存储为UTF-8并将其转换回UTF-16?我认为Xcode的首选项与您创建的数据库的编码无关。运行调试后,我注意到当我从CSV文件加载元素时,它正在以错误的编码读取它们。以下是读取以错误格式显示数据的CSV的行:NSArray*dataRows=[dataFile Components由字符串分隔:@\n];我该如何为UTF-16编码呢?