参考各位网友研究成果,在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_Feature_GetFieldAsString__SWIG_1")]
public static extern IntPtr Feature_GetFieldAsString__SWIG_1(Handl

本文介绍了在VS2010环境下编译GDAL2.2.4库时遇到的中文乱码问题,并提供了一个全面的解决方案。通过修改.NET平台的字符串封送方式,以UTF8代替默认编码,成功解决了函数传入中文字符时的乱码问题,确保了在C#中使用GDAL处理中文路径、Shape文件名、图层名、字段名等时的正确显示。文章提供了修订版DLL下载链接。
最低0.47元/天 解锁文章
3938

被折叠的 条评论
为什么被折叠?



