前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GeoTools读取ESRI ShapeFile中文乱码解决方法

GeoTools读取ESRI ShapeFile中文乱码解决方法

作者头像
卡尔曼和玻尔兹曼谁曼
发布2019-01-22 10:50:06
2.4K0
发布2019-01-22 10:50:06
举报
文章被收录于专栏:给永远比拿愉快

今天在使用Java版GIS开源工具GeoTools读取ShapeFile文件,其中ShapeFile的dbf文件(属性表)中的属性为中文字符,按照官方的案例读取结果显示为乱码。 原始的代码为:

代码语言:javascript
复制
/**
 * @description: 使用GeoTools库读取ShapeFile文件
 * @author Zhenyu Tan 
 * @date 2016年8月9日 下午10:15:09 
 * @version 1.0
 */
public class ShapeFileReader {
    public static void main(String[] args) throws Exception {
        String filePath = "F:/2016/Data/中国/China/China.shp";
        File shapeFile = new File(filePath);

        FileDataStore dataStore = FileDataStoreFinder.getDataStore(shapeFile);
        // 设置编码后可以正确读取
        //((ShapefileDataStore) dataStore).setCharset(Charset.forName("GBK"));
        SimpleFeatureSource featureSource = dataStore.getFeatureSource();
        SimpleFeatureIterator featureIter = featureSource.getFeatures().features();

        // 利用SimpleFeature的迭代器,依次遍历所有的SimpleFeature并输出其属性值
        while (featureIter.hasNext()) {
            SimpleFeature feature = featureIter.next();
            List<Object> attributes = feature.getAttributes();
            for (Object attr : attributes) {
                System.out.println(attr.toString());
            }
        }
    }
}

原因分析: 通过查看ShapefileDataStore的源码可以发现:GeoTools读取ShapeFile文件的默认编码为ISO-8859-1。而我们中文操作系统下ShapeFile文件的默认编码一般为GBK,所以只要告诉ShapefileDataStore使用GBK编码进行解析就OK了。

解决方案一: 设置ShapefileDataStore的解码方式(上面代码片段中以注释的方式给出):

((ShapefileDataStore) dataStore).setCharset(Charset.forName("GBK"));

解决方案二: 手动进行编码转换(治标不治本):

String strAttr = new String(attr.toString().getBytes("ISO-8859-1"), "GBK");

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年08月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档