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アプリケーションの出力でそれを印刷しようとした。いくつかのウィンドウタイトルの特殊文字が正常に表示されました。
私はここで何が欠けていますか?
ありがとうございます。