我遇到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應用程序輸出中。它成功地展示了一些窗口標題的特殊字符。
我在這裏錯過了什麼?
謝謝。