SQLite - 编码问题
SQLite - encoding issues
我正在使用 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 字符串,在调用 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。
如果有任何帮助,我将不胜感激。
提前致谢!
SQLite 函数使用 UTF-8 编码。
CP_ACP
是不同的东西。使用 CP_UTF8
.
(数据库编码只是指定文本在数据库文件中的存储方式,但不影响任何 API 功能。使用 utf-16le
只会降低效率。)
我正在使用 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 字符串,在调用 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。
如果有任何帮助,我将不胜感激。 提前致谢!
SQLite 函数使用 UTF-8 编码。
CP_ACP
是不同的东西。使用 CP_UTF8
.
(数据库编码只是指定文本在数据库文件中的存储方式,但不影响任何 API 功能。使用 utf-16le
只会降低效率。)