我有一个以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看起来很好但我不能保存这个编码。