如何使用iPhone SDK从SQLite db获取原始特殊字符?

use*_*099 0 sqlite iphone cocoa-touch objective-c ios

我正在将SQL内容(具有特殊字符,如项目符号等)插入到SQLite数据库中.

当我尝试在视图上获取内容时,它不会正确显示特殊字符.它向我展示了垃圾文本.

如何确保我在数据库中插入的任何文本都在视图中正确显示.

谢谢!

我的插入代码:

//此查询方法实现位于不同的文件中

- (NSArray *)executeQuery:(NSString *)sql arguments:(NSArray *)args {
    sqlite3_stmt *sqlStmt;

    if (![self prepareSql:sql inStatament:(&sqlStmt)])
        return nil;

    int i = 0;
    int queryParamCount = sqlite3_bind_parameter_count(sqlStmt);
    while (i++ < queryParamCount)
        [self bindObject:[args objectAtIndex:(i - 1)] toColumn:i inStatament:sqlStmt];

    NSMutableArray *arrayList = [[NSMutableArray alloc] init];   // By Devang
    int columnCount = sqlite3_column_count(sqlStmt);
    while ([self hasData:sqlStmt]) {
        NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
        for (i = 0; i < columnCount; ++i) {
            id columnName = [self columnName:sqlStmt columnIndex:i];
            id columnData = [self columnData:sqlStmt columnIndex:i];
            [dictionary setObject:columnData forKey:columnName];
        }
        [arrayList addObject:dictionary];

        //[arrayList addObject:[dictionary autorelease]];
    }

    sqlite3_finalize(sqlStmt);

    return arrayList;
}
Run Code Online (Sandbox Code Playgroud)

//现在通过此文件的make对象调用此方法

NSString *inserQuery =[NSString stringWithFormat:@"insert into feedtest (title,summary,image,id) values ('%@','%@','%@',%d)",cell.textLabel.text,source,returnURL,indexPath.row];
        NSLog(@"query - %@",inserQuery);

    [database executeQuery:inserQuery];
Run Code Online (Sandbox Code Playgroud)

//重新获取数据

NSString *sd=[NSString stringWithFormat:@"Select title,summary from feedtest"];

    NSMutableArray *p=[[NSMutableArray alloc]init];
    p=[[database executeQuery:sd ] mutableCopy];
    [database close];

    NSString *titleHTML = [[p objectAtIndex:i]valueForKey:@"title"];
    NSString *postHTML =[[p objectAtIndex:i]valueForKey:@"summary"];
    NSLog(@"%@",titleHTML);
    NSLog(@"%@",postHTML);
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以使用FireFox插件SQLite检查本地数据库.但是,有时在检索时我们遇到了一些奇怪的问题,比如存储中存在的问题不正确而且有时会发生崩溃.所以我的建议是你应该检查编码方案(通常,这没关系)和获取数据时使用这个:

[NSString stringWithFormat:@"%s",(const char*)sqlite3_column_text(statement, 4)] ;
Run Code Online (Sandbox Code Playgroud)

代替:

[NSString stringWithUTF8String:(const char*)sqlite3_column_text(statement, 4)];
Run Code Online (Sandbox Code Playgroud)

希望,这是你正在寻找的.任何关注都会回复给我.:)