C/C++教程

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;
}

这篇关于C++ GDAL库获取shp属性字段中文乱码问题(GetFieldAsString())的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!