【问题标题】:Reading a UTF-16 file into core data将 UTF-16 文件读入核心数据
【发布时间】:2011-08-11 03:08:25
【问题描述】:

我有一个包含泰米尔语字符的 utf-16 csv 文件,并且在我查看时显示良好。我将它读入我的 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];
    }
}

}

【问题讨论】:

    标签: iphone ios ipad core-data utf-16


    【解决方案1】:

    假设card.questionNSString你想要的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];
    

    【讨论】:

    • 我尝试使用选项 2。注意:在 UTF16StringEncoding 前添加“NS”。它编译并对我有意义,但不起作用。我进入一个 sqlite 浏览器,发现 dbase 的编码是 UTF-8。我将如何改变 Xcode 的编码方式?如果 dbase 不存在,我在程序中创建它。
    • 我也怀疑我没有告诉项目使用什么编码。我进入 Xcode 首选项并将其从 UTF-8 更改为 UTF-16,但我不确定这是否是现有项目更改字符集编码所需要做的全部。
    • 感谢“NS”。编辑了我的答案。 “数据库的编码是 UTF-8”是什么意思?一个问题,您是否不可能将数据存储为 UTF-8 并在从数据库中获取数据时将其转换回 UTF-16?
    • 我认为 Xcode 的偏好与您创建的数据库的编码没有任何关系。如果它改变任何东西,我会感到非常惊讶。
    • 运行调试后,我注意到当我从 CSV 文件加载元素时,它正在以错误的编码读取它们。这是读取 CSV 的行,它以错误的格式显示数据: NSArray *dataRows = [dataFile componentsSeparatedByString:@"\n"];我将如何为 UTF-16 进行编码?
    猜你喜欢
    • 2015-05-14
    • 2018-06-09
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    相关资源
    最近更新 更多