SharpMap应用开发——中文乱码问题终极解决方案
2012-06-20 13:58
369 查看
前后做过多个基于SharpMap的应用开发,期间有两次遇上中文乱码问题,记录于此,以飨众人。
1、读取shapefile属性时中文乱码
解决方案:在实例化shapefile图层对象后,指定其编码方式,见如下示例代码。
2、使用ExecuteIntersectionQuery方法时,获取的FeatureDataSet结果中的Table成员的列名称中文乱码
解决方案:修改SharpMap源码中DbaseReader.cs类的ParseDbfHeader方法,将ColumnName的默认编码UTF7修改为支持中文编码的方式,如下代码所示。
实际上,在使用MapBox的Query、QueryBox工具时候,最终也会调用ExecuteIntersectionQuery方法,所在是使用Query工具时也会出现这个问题。
对于第二个问题,只能采取修改源码的方式,所以建议采用SharpMap的开发人员在项目中尽量用其源码,发现有问题,可以一探究竟也方便修改。若是采用发布的DLL,一旦发现有问题,那可真是没辙!
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,一旦发现有问题,那可真是没辙!
相关文章推荐
- Java WEB开发中的中文乱码问题解决之终极之道
- ndk开发过程中中文乱码问题的解决方案
- 使用Struts进行JavaWeb开发的中文乱码问题解决方案
- 网站开发笔记:PHP oci连接Oracle中文乱码问题解决方案
- JSP开发过程遇到的中文乱码问题及解决方案
- JSP中文乱码问题终极解决方案(转)
- 使用JSP开发应用程序时的编码(中文等乱码)问题的建议解决方案(包括接受request和数据库操作)
- MySQL字符集中文乱码终极解决方案和mysql查询中文问题解决方法[转贴]
- JSP中文乱码问题终极解决方案
- JSP中文乱码问题终极解决方案
- 关于JSP开发过程中的几种中文乱码问题的解决方案
- MySQL字符集中文乱码终极解决方案和mysql查询中文问题解决方法[转贴]
- 使用WebStorm开发web前端 网页中文乱码问题的解决方案
- JSP中文乱码问题终极解决方案
- JSP中文乱码问题终极解决方案
- JAVAWEB开发过程中中文乱码问题解决方案
- JSP中文乱码问题终极解决方案(下)
- MySQL字符集中文乱码终极解决方案和mysql查询中文问题解决方法[转贴]
- JSP中文乱码问题终极解决方案
- JSP中文乱码问题终极解决方案