编程语言
首页 > 编程语言> > C++ GDAL库获取shp属性字段中文乱码问题(GetFieldAsString())

C++ GDAL库获取shp属性字段中文乱码问题(GetFieldAsString())

作者:互联网

一:前言:

因工作需要,需要存下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;
}

标签:shp,GetFieldAsString,string,pBuf,乱码,pwBuf,str,nwLen,NULL
来源: https://blog.csdn.net/qq_41965957/article/details/121681411