0

我有以下代码:

NSMutableArray *getDatosSelect=nil;
NSMutableString *consulta=[[NSMutableString alloc]init];
[consulta appendString:@"SELECT idOzDiccionario, espanyol, ingles, hebreo, fonetica FROM ozdiccionario WHERE UPPER(ingles) LIKE 'FRIEND%'"];
if ( sqlite3_prepare_v2(sql,[consulta UTF8String],[consulta length],&resultado,&siguiente) == SQLITE_OK ){
    getDatosSelect=[[NSMutableArray alloc] init];
        while (sqlite3_step(resultado)==SQLITE_ROW){
            NSMutableArray *datos=[[NSMutableArray alloc] init];
        for (int x=0; x<sqlite3_column_count(resultado); x++) {
            char *pChar=(char *)sqlite3_column_text(resultado, x);
            if (pChar!=nil) {
                [datos addObject:[NSString stringWithUTF8String: pChar]];
            }
        }
        [getDatosSelect addObject:datos];
        datos=nil;
    }
}else {
    NSString *errores=[NSString stringWithFormat:@"%s", sqlite3_errmsg(sql)];
        NSLog(@"%@ %@",TAG,errores);
}

如果我运行其他代码,它会正确运行

NSMutableArray *getDatosSelect=nil;
NSMutableString *consulta=[[NSMutableString alloc]init];
[consulta appendString:@"SELECT idOzDiccionario, espanyol, ingles, hebreo, fonetica FROM ozdiccionario WHERE hebreo='חבר'"];
if ( sqlite3_prepare_v2(sql,[consulta UTF8String],[consulta length],&resultado,&siguiente) == SQLITE_OK ){
    getDatosSelect=[[NSMutableArray alloc] init];
    while (sqlite3_step(resultado)==SQLITE_ROW){
        NSMutableArray *datos=[[NSMutableArray alloc] init];
        for (int x=0; x<sqlite3_column_count(resultado); x++) {
            char *pChar=(char *)sqlite3_column_text(resultado, x);
            if (pChar!=nil) {
                [datos addObject:[NSString stringWithUTF8String: pChar]];
            }
        }
        [getDatosSelect addObject:datos];
        datos=nil;
    }
}else {
    NSString *errores=[NSString stringWithFormat:@"%s", sqlite3_errmsg(sql)];
        NSLog(@"%@ %@",TAG,errores);
}

我收到以下错误:

无法识别的标记:“”◊ó◊ë◊”

该方法将字符串转换为 UTF8 字符时出现此错误

为什么?问题是什么?

4

1 回答 1

3

您已[consulta length]使用consulta. 这是不正确的。length是字符数。字节数可能会更多,而希伯来语通常会更多。要获得长度,您需要使用:

[consulta lengthOfBytesUsingEncoding:NSUTF8StringEncoding];

您的查询很可能被截断,因此它们可能会或可能不会根据其确切内容起作用。

于 2013-09-17T22:47:59.323 回答