SharpMap应用开发——中文乱码问题终极解决方案
前后做过多个基于SharpMap的应用开发,期间有两次遇上中文乱码问题,记录于此,以飨众人。
1、读取shapefile属性时中文乱码
解决方案:在实例化shapefile图层对象后,指定其编码方式,见如下示例代码。
public ILayer Create(string layerName, string connectionInfo) { ShapeFile shapeFileData = new ShapeFile(connectionInfo); shapeFileData.Encoding = Encoding.GetEncoding("gb2312"); VectorLayer shapeFileLayer = new VectorLayer(layerName, shapeFileData); return shapeFileLayer; }
2、使用ExecuteIntersectionQuery方法时,获取的FeatureDataSet结果中的Table成员的列名称中文乱码
解决方案:修改SharpMap源码中DbaseReader.cs类的ParseDbfHeader方法,将ColumnName的默认编码UTF7修改为支持中文编码的方式,如下代码所示。
//DbaseColumns[i].ColumnName = Encoding.UTF7.GetString((br.ReadBytes(11))).Replace("\0", "").Trim(); DbaseColumns[i].ColumnName = Encoding.GetEncoding("gb2312").GetString((br.ReadBytes(11))).Replace("\0", "").Trim();
实际上,在使用MapBox的Query、QueryBox工具时候,最终也会调用ExecuteIntersectionQuery方法,所在是使用Query工具时也会出现这个问题。
对于第二个问题,只能采取修改源码的方式,所以建议采用SharpMap的开发人员在项目中尽量用其源码,发现有问题,可以一探究竟也方便修改。若是采用发布的DLL,一旦发现有问题,那可真是没辙!
出处:http://www.cnblogs.com/hans_gis/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。