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 に答える