首页 编程与开发 Python Python 读取 Shapefile 中文乱码怎么办?编码、驱动与字段名限制说明

Python 读取 Shapefile 中文乱码怎么办?编码、驱动与字段名限制说明

作者: GIS研习社 更新时间:2026-05-30 13:49:29 分类:Python

Shapefile 是 GIS 中最常见的数据格式之一,也是中文乱码最常见的来源之一。用 GeoPandas、Fiona 或 ArcGIS 打开同一份数据,有时一个软件正常,另一个软件乱码。原因通常不在 Python 本身,而在 Shapefile 的编码信息不完整。

Shapefile 编码从哪里来

属性表存储在 .dbf 文件中,编码可能由 .cpg 文件声明。如果缺少 .cpg,不同软件会按自己的默认编码猜测,中文就可能变成乱码。国内历史数据常见 GBK、GB18030,也有 UTF-8。

GeoPandas 指定编码

import geopandas as gpd

gdf = gpd.read_file("data.shp", encoding="gbk")
gdf.to_file("data_utf8.shp", encoding="utf-8")

如果 gbk 不行,可以尝试 gb18030 或 utf-8。读入后先查看几行属性,确认中文字段值是否正常,再进行后续分析。

字段名限制

Shapefile 字段名最多 10 个字符,中文字段名和长字段名很容易被截断或改名。正式数据交换时建议使用短英文或拼音字段名,再配套字段说明表。否则多轮处理后字段含义会越来越难追踪。

什么时候换格式

如果项目需要保存长字段名、更多字段类型、中文元数据或多图层结构,GeoPackage 往往比 Shapefile 更合适。它是单文件 SQLite 容器,编码和字段限制更友好,也被 QGIS、ArcGIS Pro 和 GeoPandas 支持。

处理乱码时不要急着批量转换。先备份原始数据,确认编码,再统一导出。编码问题一旦被错误覆盖,后面恢复会很麻烦。