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,一旦发现有问题,那可真是没辙!

posted @ 2012-06-20 13:58  百折不回  阅读(1303)  评论(1编辑  收藏  举报