您的位置:首页 > 产品设计 > 产品经理

SharpMap应用开发——中文乱码问题终极解决方案

2012-06-20 13:58 369 查看
前后做过多个基于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,一旦发现有问题,那可真是没辙!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: