gpt4 book ai didi

objective-c - 从 sqlite 数据库中获取数据时编码损坏

转载 作者:行者123 更新时间:2023-11-28 20:38:25 25 4
gpt4 key购买 nike

我将应用程序数据(西里尔字符串)存储在 sqlite 中。当我尝试在应用程序中显示该数据时,我得到了奇怪的字符而不是文本。这是我获取数据的方式。

-(NSString *)getData
{
sqlite3 *database;

if(sqlite3_open([[self dataFilePath] UTF8String], &database) != SQLITE_OK)
{
sqlite3_close(database);
}

NSString *query = [NSString
stringWithFormat:@"SELECT name FROM users WHERE kind = '%@' ORDER BY RANDOM() LIMIT 1", self.kind ];
sqlite3_stmt *statement;

NSString *selectedQuestion;

if(sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK)
{
sqlite3_step(statement);
selectedQuestion =[NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 0)];
sqlite3_finalize(statement);
}

sqlite3_close(database);

return selectedQuestion;
}

最佳答案

假设您使用的是 UTF-8 而不是 UTF-16 sqlite 数据库,您可能会更喜欢使用:

selectedQuestion = [NSString stringWithUTF8String: (char*)sqlite3_column_text(statement,0)];

而且,更一般的:

selectedQuestion = [NSString stringWithCString: (char*) sqlite3_column_text(statement,0) encoding: ENCODING];

可用于 NUL 安全的其他编码。例如,将 ENCODING 替换为 UTF16 的 NSUTF16StringEncoding(如果您提前知道并且不能期望标记存在,则有 BE 和 LE 版本的变体)。

对于非 NUL 终止的编码,您可以使用:

selectedQuestion = [[[NSString alloc] initWithBytes: ptr  length: length encoding: ENCODING] autorelease];

其中 ptr 和 length 具有字符串的位置和长度,如上所示,ENCODING 表示可用编码列表中的 ENCODING。

关于objective-c - 从 sqlite 数据库中获取数据时编码损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9607960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com