参考各位网友研究成果,在VS2010环境成功编译GDAL2.2.4库,包括CSharp支持库,发现中文乱码问题没有根本性解决,通过网友们研究,解决了中文路径,Shape文件名、图层名、字段名等中文支持问题,但是在部分函数需要传入中文时,仍然乱码未解决。
详见
【C#】C#中使用GDAL3(二):Windows下读写Shape文件及超详细解决中文乱码问题 - 泥头 - 博客园j
经过反编译跟踪和查阅资料,这个问题的根本原因是由于.Net平台在互操作时封送字符串的处理方式定义导致的,资料见.Net帮助主题互操作的封送处理部分。
平台对String的默认封送处理方式是以默认编码指针封送,但是GDAL内部使用UTF8编码,UTF8与GB2312转换存在众所周知的奇数乱码问题,所以导致函数传入中文字符内部无法识别,上面网友给出的方案仅适用参数中文字符数为偶数的情况,奇数时仍然会报错。
完美解决方案是修改字符串的封送方式,函数调用关系如下
OSGeo.OGR.Feature.GetFieldAsString(string field_name)
[DllImport("ogr_wrap", EntryPoint = "CSharp