GDAL11.1版本不支持中文路径,读取shp文件属性字段出现乱码

首先读取带有中文路径的shp文件,代码如下:

 string strShpFullName = @"G:\学习资料\ArcGIS空间数据\ATShp\Boundary\China_Boundary.shp";
            //注册Ogr
            Ogr.RegisterAll();
            OSGeo.GDAL.Gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");
            //读取字段属性值时设置,否则有中文乱码
            OSGeo.GDAL.Gdal.SetConfigOption("SHAPE_ENCODING", "NO");
            DataSource ds = Ogr.Open(strShpFullName, 0);
            if (ds == null)
            {

            }
            Layer layer = ds.GetLayerByName(Path.GetFileName(strShpFullName));
            if (layer == null)
            {

            }

将“GDAL_FILENAME_IS_UTF8”设置为“NO”,结果DataSource为空,如下图:
图片说明
如果将“GDAL_FILENAME_IS_UTF8”设置为“YES”,DataSource不为空,但是DataSource得属性Name中含有乱码,如下图:
图片说明

这是什么问题??跪求答案。。。。。

第二个问题:读取shp文件的属性表,出现中文乱码,但是我已经设置了“OSGeo.GDAL.Gdal.SetConfigOption("SHAPE_ENCODING", "NO");”,为什么还会出现这种问题,在GDAl10.0中就没出现

好吧,我今天正好碰到这个问题,网上一堆办法都治标不治本,我愤怒了,给一个我的解决方法:
具体思路如下,引入命名空间,using System.Runtime.InteropServices,声明一个DllImport函数。
图片说明
将所有调用GetFiledAsString的地方,修改为
图片说明
因为SWIG自动包装处理的不到位,是的多字节字符串和中文字符串(双字节)之间的处理不正确。第一个函数是引入GDAL中OGR的CAPI接口,该接口为一组C的导出函数,在OGR的不同版本之间保持稳定。传入参数handle是Feature的句柄和字段索引值。handle就是C++中Feature类的指针。再看ogr.Feature.getCPtr(feature)函数。因为ogr的c#是swig包装C++而成,swig提供了由C#对象返回指向c++对象的能力,因此相当于在C++的Feature对象上调用GetFieldAsString。因为字符串指针是个地址,因此返回IntPtr,在利用Marshal直接解码就可以了。

补充:当然 ,这句还是要的,
OSGeo.GDAL.Gdal.SetConfigOption("SHAPE_ENCODING", "gb2312");
有的人说 OSGeo.GDAL.Gdal.SetConfigOption("SHAPE_ENCODING", "");也可以,确实也可以,这个应该返回当前默认代码页。

楼上的办法使用了,还是中文乱码啊。和自带的GetFieldAsString一样的读取效果,乱码

还是变相解决了,不涉及GDAL,虽然麻烦点,但实现了目的。我真聪明