SQLite - 编码问题

时间:2016-12-18 04:46:23

标签: c++ sqlite encoding utf-16

我正在使用SQLite编写应用程序,每当我插入西班牙语字符时,我都会得到这种字符串: Mart n(它应该读作'Martín')

好的,所以如果我用SQLiteManager(Firefox插件)打开我的数据库,我的字符串看起来很奇怪。但SQLiteManager能够正确插入和显示任何字符串。 SQLiteManager插入的任何字符串都可以在我的应用程序中显示。

所以插入字符串时我一定做错了。这是我的代码:

char szAux[512];
ZeroMemory(szAux, 512);
WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, szSQL, wcslen(szSQL), szAux, 512, NULL, 0);
int nRet= sqlite3_exec(m_hDB, szAux, NULL, 0, &pErrMsg);

注意:szSQL是我的应用程序使用的wchar-string,在调用WideCharToMultiByte()之后包含以下内容: “INSERT INTO numeros VALUES(1,'Martín','Sonny','123-123123','me @email.com',-1,0,1482036037,125.500000)”

SQLiteManager告诉我,我的数据库是utf-16le。我在Windows10 64位机器上使用vs2015。

我很感激任何帮助。 提前谢谢!

1 个答案:

答案 0 :(得分:1)

SQLite函数使用UTF-8编码。

CP_ACP有所不同。使用CP_UTF8

(数据库编码只指定文本在数据库文件中的存储方式,但不影响任何API函数。使用utf-16le只会降低效率。)