因工作需要,需要存下shp数据的属性字段和几何信息,但是折腾了一上午,属性字段中文老是乱码,网上搜了很多解决方法大都是在读shp数据前面加上下面这句话
CPLSetConfigOption("SHAPE_ENCODING", "");
但是我用这方法完全没什么用
将中文用下面函数转换一下即可
/*! * @brief UTF8转string */ std::string UTF8_To_string(const std::string& str) { int nwLen = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, NULL, 0); wchar_t* pwBuf = new wchar_t[nwLen + 1]; //一定要加1,不然会出现尾巴 memset(pwBuf, 0, nwLen * 2 + 2); MultiByteToWideChar(CP_UTF8, 0, str.c_str(), str.length(), pwBuf, nwLen); int nLen = WideCharToMultiByte(CP_ACP, 0, pwBuf, -1, NULL, NULL, NULL, NULL); char* pBuf = new char[nLen + 1]; memset(pBuf, 0, nLen + 1); WideCharToMultiByte(CP_ACP, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL); std::string strRet = pBuf; delete[]pBuf; delete[]pwBuf; pBuf = NULL; pwBuf = NULL; return strRet; }