Просмотр исходного кода

can write the chinese character as the std name and std group name. add a new std database SeaMineral.db

GSP 1 неделя назад
Родитель
Сommit
0df5bdf110

BIN
Bin/x64/Debug/Config/SysData/SeaMineral.db


+ 26 - 3
OTSCPP/OTSClassifyEngine/ExpressionParseEngine/ParticleSTDDB.cpp

@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "ParticleSTDDB.h"
 #include "ParticleSTDTable.h"
 #include "ParticleSTD.h"
@@ -7,6 +7,27 @@
 
 namespace OTSClassifyEngine
 {
+	namespace{
+		
+		std::string utf8ToGbk(const std::string& utf8Str) {
+			// 第一步:UTF-8转UTF-16
+			int wcsLen = MultiByteToWideChar(CP_UTF8, 0, utf8Str.c_str(), -1, nullptr, 0);
+			wchar_t* wcsBuf = new wchar_t[wcsLen];
+			MultiByteToWideChar(CP_UTF8, 0, utf8Str.c_str(), -1, wcsBuf, wcsLen);
+
+			// 第二步:UTF-16转GBK
+			int gbkLen = WideCharToMultiByte(CP_ACP, 0, wcsBuf, -1, nullptr, 0, nullptr, nullptr);
+			char* gbkBuf = new char[gbkLen];
+			WideCharToMultiByte(CP_ACP, 0, wcsBuf, -1, gbkBuf, gbkLen, nullptr, nullptr);
+
+			std
+				::string gbkStr(gbkBuf);
+			delete[] wcsBuf;
+			delete[] gbkBuf;
+			return gbkStr;
+		}
+	
+	}
 	using namespace OTSSQLITE;
 	CParticleSTDDB::CParticleSTDDB(CDBStoreBasePtr a_datastore)
 	{
@@ -130,7 +151,8 @@ namespace OTSClassifyEngine
 		CString sIncAName;
 		nCol = (int)CParticleSTDTable::ColumnID::S_StrName - (int)CParticleSTDTable::ColumnID::MIN;
 		sIncAName = a_query->GetColStringValue(nCol, _T(""));
-		stdItem->SetName(sIncAName.GetString());
+		std::string gbkName = utf8ToGbk(sIncAName.GetString());	
+		stdItem->SetName(gbkName);
 
 		CString sColor;
 		nCol = (int)CParticleSTDTable::ColumnID::S_COLOR - (int)CParticleSTDTable::ColumnID::MIN;
@@ -244,7 +266,8 @@ namespace OTSClassifyEngine
 		CString grpName;
 		nCol = (int)CParticleSTDTable::ColumnID::N_GroupId - (int)CParticleSTDTable::ColumnID::MIN+(int)CSTDGroupTable::ColumnID::S_NAME- (int)CSTDGroupTable::ColumnID::MIN+1;
 		grpName = a_query->GetColStringValue(nCol, _T(""));
-		stdItem->SetGrpName(grpName.GetString());
+		std::string gbkGrpName = utf8ToGbk(grpName.GetString());	
+		stdItem->SetGrpName(gbkGrpName);
 
 		CString grpColor;
 		nCol = (int)CParticleSTDTable::ColumnID::N_GroupId - (int)CParticleSTDTable::ColumnID::MIN + (int)CSTDGroupTable::ColumnID::S_COLOR - (int)CSTDGroupTable::ColumnID::MIN+1;