求救:sqlite 中文读取的问题
我用C++ 的 CppSQLite3 操作 sqlite 库,但读取字段中的中文数据有问题。
下面是读取的表及对应实体:其中 CType 表的 CTypeName 字段是存储中文数据的字段
CREATE TABLE "main"."CType" (
"CTypeId" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"CTypeName" TEXT NOT NULL,
"CTypeSort" INTEGER NOT NULL,
"CCategory" INTEGER NOT NULL
)
;
class CType
{
public:
CType(void){
}
~CType(void){
}
int CTypeId;
wstring CTypeName;
int CTypeSort;
int CCategory;
};
读取代码如下:
void SelectCType(TypeCategory category, list<CType>& const types)
{
CppSQLite3DB db;
db.open(dbPath);
string sql = "select CTypeId, CTypeName, CTypeSort, CCategory from CType where CCategory = " + Convert::ToString((int(category))) + " order by CTypeSort asc";
CppSQLite3Query q = db.execQuery(sql.c_str());
types.clear();
while(!q.eof())
{
CType type;
type.CTypeId = q.getIntField(0);
string a = q.getStringField(1);
type.CTypeName = Convert::ToWString(q.getStringField(1));
type.CTypeSort = q.getIntField(2);
type.CCategory = q.getIntField(3);
types.push_back(type);
q.nextRow();
}
db.close();
}
static wstring Convert::ToWString(const string& s)
{
setlocale(LC_ALL, "chs");
const char* _Source = s.c_str();
size_t _Dsize = s.size() + 1;
wchar_t *_Dest = new wchar_t[_Dsize];
wmemset(_Dest, 0, _Dsize);
mbstowcs(_Dest,_Source,_Dsize);
wstring result = _Dest;
delete []_Dest;
setlocale(LC_ALL, "C");
return result;
}
type.CTypeName = Convert::ToWString(q.getStringField(1)); 老是读不出中文来。