我来自中国,我有一个关于sqlite的问题,但是我的英语有点差。我会尽力清楚地表达自己的意思。
最近,我在sqlite中使用Visual Studio 2005(VC++)进行WinCE开发,使用了sqlite数据库。在我的表中,一个字段包含一些汉字。当我显示这些时,我没有得到我想要的,因为它们都是奇怪的字符。
我使用了我想要的函数的返回列值,但我不能。
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
// or
const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);
他们说sqlite3中的编码是utf8,所以你需要将其转换为unicode。我尝试使用在互联网上找到的一个函数来完成这项工作,如下所示:
wstring UTF8ToUnicode(const string& strin)
{
wstring strOut;
int dwNum = MultiByteToWideChar(CP_UTF8,0,strin.c_str(),-1,0,0)
wchar_t* pBuffer = new wchar_t[dwNum];
if (!pBuffer){return strOut;}
memset(pBuffer,0,dwNum*sizeof(wchar_t));
if (MultiByteToWideChar(CP_UTF8,0,strin.c_str(),-1,pBuffer,dwNum)>=0)
{
strOut= pBuffer;
}
delete[] pBuffer;
return strOut;
}
最佳答案
“他们说sqlite3中的编码是utf8”
这句话谁说的都是错的。使用的编码取决于数据库的打开方式。
“如果调用 sqlite3_open() 或 sqlite3_open_v2(),则数据库的默认编码将为 UTF-8;如果使用 sqlite3_open16(),则数据库的默认编码将为 native 字节顺序的 UTF-16。”
http://sqlite.org/c3ref/open.html
但是,这并不重要。但是,存储的数据 sqlite3_column_text() 将始终返回 UTF8,而 sqlite3_column_text16() 将始终以 native 字节顺序返回 UTF16。您不需要编写自己的转换代码。唯一的区别是效率 - 无需转换即可提取存储的数据,速度稍快一些。
关于c++ - sqlite3中使用汉字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8574055/