我有一个以utf-8编码的sqlite表 . firefox附加SQLite Manager向我展示了所有正确的标志,而pragma编码也表示编码utf8 .

如何正确编码和显示在c程序中的数据?
这是我的代码:

sqlite3 * dataBase;
const char * data;
sqlite3_stmt * statement;
int row = 0;
sqlite3_open("C:\\Users\\david\\Documents\\Visual Studio 2013\\Projects\\Database1\\Database1\\Spieler.sqlite", &dataBase);
data = "SELECT LigaName,LigaID FROM Liga";
sqlite3_prepare_v2(dataBase, data, strlen(data) + 1, &statement, NULL);

while (1)
{
    int s;

    s = sqlite3_step(statement);
    if (s == SQLITE_ROW)

    {
        int bytes;

        bytes = sqlite3_column_bytes(statement, 0);
        std::string ligaName = std::string(reinterpret_cast<const char*>(
            sqlite3_column_text(statement, 0)));
        std::string ligaIDString = std::string(reinterpret_cast<const char*>(
            sqlite3_column_text(statement, 1)));
    }
}

问题是字符串没有编码为utf-8,当然,现在当我用这段代码输入字符串时

std::cout << ligaName << std::endl;
std::cout << "ligaName: " << sqlite3_column_text(teamStatement, 0) << std::endl;

我从sqlite3_column_text得到了类似的东西

  • ü而不是ü

  • Ã而不是ä

  • ¶而不是ö

所有这些变音都在SQLite Manager中显示正确 .
经过一些研究后我发现这似乎是正确的utf8字节编码为windows-1252 .
如何显示正确的德国变音符号?我在Windows7上使用Visual Studio 2013

EDIT :
另一点可能很重要:当我在记事本中打开数据库时,它显示我编码ANSI,我看到了前面提到的相同的奇怪迹象 .
当我切换到UTF-8 everthing看起来很好,但我不能保存这种编码 .