我遇到SQLite3 C API的问题。我试图从Firefox用来存储很多东西的places.sqlite数据库中读取一些信息。我感兴趣的是检索上次访问的网站和相关的窗口标题。SQLite3不返回的特殊字符
我写这段代码:
query = "SELECT `url`, `title` FROM `moz_places` WHERE `id`=(SELECT `place_id` FROM `moz_historyvisits` ORDER BY `id` DESC LIMIT 1)";
stmt = NULL;
if (sqlite3_prepare_v2(db, query.c_str(), strlen(query.c_str()) + 1, &stmt, NULL) != SQLITE_OK)
cerr << sqlite3_errmsg(db) << endl;
else
{
while ((ret = sqlite3_step(stmt)) == SQLITE_ROW)
cout << sqlite3_column_text(stmt, 0) << endl << sqlite3_column_text(stmt, 1) << endl;
if (ret != SQLITE_DONE)
cerr << sqlite3_errmsg(db) << endl;
}
当有它工作正常,无特殊字符,但如果窗口标题包含例如“E”,“E”或“•”,我得到那些美妙的人物“Ô,“è”或“•”。 我做了一些研究,发现有些人实际上得到了非UTF8编码的数据库。所以我用SQLite Manager和“PRAGMA编码”请求检查了places.sqlite数据库编码,都声称它是UTF-8编码。 然后我创建了我自己的数据库,用UTF-8编码,在表格中输入了一些特殊字符,但它也不起作用。所以我认为也许QtCreator(我正在使用)不能显示特殊字符,我试图用GetForegroundWindow()
获得前景窗口标题并将其打印在QtCreator应用程序输出中。它成功地展示了一些窗口标题的特殊字符。
我在这里错过了什么?
谢谢。