我有以下代码:
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字符
时,会发生此错误为什么呢?有什么问题?
答案 0 :(得分:3)
您已使用[consulta length]
作为consulta
中的字节数。这是不正确的。 length
是字符数。字节数可能更多,希伯来语一般都是。要获得长度,您需要使用:
[consulta lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
您的查询可能会被截断,因此根据其确切内容,它们可能会也可能不会发挥作用。