C# 解决GDAL读取SHP中文属性后几位乱码问题

//相信你们搜到这里的时候已经很明白自己的代码了,具体实现就不贴了,只贴关键代码

//这里引用gdal中读取属性字段转成string的函数,试过好几个版本均可以
//因为字段名可能是中文所以不能用字段名,不然会有乱码问题
[DllImport("gdal110.dll", EntryPoint = "OGR_F_GetFieldAsString", CallingConvention = CallingConvention.Cdecl)]
 public extern static System.IntPtr OGR_F_GetFieldAsString(HandleRef handle, int index);
//调用gdal方法传入feature和属性位置的index
IntPtr pStr = OGR_F_GetFieldAsString(OSGeo.OGR.Feature.getCPtr(myFeature), (int)fieldIndex);
//然后调用.net的非托转托的marshal 把指针转换成变量
string s= Marshal.PtrToStringAnsi(pStr);

此处应有掌声。对了

Gdal.SetConfigOption(“GDAL_FILENAME_IS_UTF8”, “YES”) 这里如果是NO的话 路径会是乱码

还有

Gdal.SetConfigOption(“SHAPE_ENCODING”,””);后边的string应该写“” 空字符串,不要写CP936  ,具体你们自己试,CP936代表codepage936  简体中文(包含繁体中文)  百度codepage 可知道具体数字代表哪种字符集。具体为什么我的shp文件不支持cp936 我也很蛋疼。

空的话应该是留给系统判断,写成null也不行,具体还是根据你们shp文件的编码你们自己试。就三种(codepage/空字符串/null),别写什么gb2312   gb18030什么的,没用,不信你随便写个字符串效果是一样的。

转载自:https://blog.csdn.net/weixin_42517102/article/details/80770178

You may also like...