У меня проблема с SQLite3 C API. Я пытаюсь прочитать некоторую информацию из базы данных place.sqlite, которую Firefox использует для хранения многих вещей. Что меня интересует, так это получить последний посещенный веб-сайт и связанный заголовок окна.
Я написал этот кусок кода:
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;
}
Когда нет специальных символов, все работает нормально, но если заголовок окна содержит, например, «é», «è» или «•», я получаю эти замечательные символы «Ã ©», «Ã¨» или «â € ¢».
Я провел некоторое исследование и обнаружил, что некоторые люди на самом деле получают базы данных не в кодировке UTF8. Поэтому я проверил кодировку базы данных place.sqlite и с помощью SQLite Manager, и с запросом «PRAGMA encoding», и оба говорят, что это кодировка UTF-8.
Затем я создал свою собственную базу данных, закодированную в UTF-8, ввел несколько специальных символов в таблицу, и это тоже не сработало. Поэтому я подумал, что, возможно, QtCreator (который я использую) не может отображать специальные символы, я попытался получить заголовок окна переднего плана с GetForegroundWindow()
и распечатать его в выходных данных приложения QtCreator. Он успешно показал специальные символы некоторых заголовков окна.
Что мне здесь не хватает?
Спасибо.