在SQlite数据库c ++中编码

时间:2014-07-30 17:58:23

标签: c++ sqlite encoding utf-8

我有一个以utf-8编码的sqlite表。 firefox附加SQLite管理器向我显示所有符号正确,编译指示编码也表示编码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

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

0 个答案:

没有答案