使用python basemap库的readshapefile函数可视化一个shp文件,原代码如下:
m = Basemap(llcrnrlat=13, urcrnrlat=58, llcrnrlon=62, urcrnrlon=143, resolution='i')
# 绘制省级行政区划边界
m.readshapefile(shapefile_path[:-4], 'provinces', drawbounds=True)
出现如下报错:
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xba in position 0: invalid start byte
原因是readshapefile默认的shp文件编码为’utf-8’, 如果读入的shp文件不是该编码,就会出现这个报错。
利用default_encoding参数,修改为正确的编码格式就行。
修改后代码如下:
m = Basemap(llcrnrlat=13, urcrnrlat=58, llcrnrlon=62, urcrnrlon=143, resolution='i')
# 绘制省级行政区划边界
m.readshapefile(shapefile_path[:-4], 'provinces', drawbounds=True, default_encoding='GBK')
一个简单粗暴的编码格式判断方法:
- shp文件有对应的后缀为.cpg的文件,用文本编辑器打开可查看shp文件的编码格式。一般是高版本arcmap(10.2.1及以上)生成的shp文件,编码多为UTF-8
- 不含.cpg文件,低版本arcmap生成的shp文件,格式通常为GBK
【------------------等出问题了再来更新更为严谨的编码格式判断方法-----------------】