"UTF-8"编解码器在 Python 底图上使用 Readshapefile 时无法解码



>我正在尝试从这里读取加拿大地图的边界

import matplotlib.pyplot as plt
import matplotlib.cm
from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
from matplotlib.colors import Normalize
m = Basemap(resolution='c', # c, l, i, h, f or None
            projection='merc',
            lat_0=56.1304, lon_0=106.3468,
            llcrnrlon=-141.0, llcrnrlat= 41.2, urcrnrlon=-52.3, urcrnrlat=69.8)
m.drawmapboundary(fill_color='#46bcec')
m.fillcontinents(color='#f2f2f2',lake_color='#46bcec')
m.drawcoastlines()

直到这里一切正常,但是当我尝试添加边界时,

m.readshapefile('mypaths/gcma000b11a_e/gcma000b11a_e', 'gcma000b11a_e')

我有这个utf-8错误:

代码来自这个很棒的教程

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 11: invalid continuation byte

您链接的形状文件实际上由 4 个文件组成(.dbf、.prj、.shp、.shx(。问题是 dbf 文件 (gcma000b11a_e.dbf(,它不是 utf-8。它包含法语字符(如é(。您必须将此文件转换为 utf-8,然后您的代码就可以工作了。转换.dbf文件的一种简单方法是使用 libre office calc 打开它,然后在导入对话框中选择"Unicode (UTF-8("。保存文件,m.readshapefile将起作用。

m.readshapefile('mypaths/gcma000b11a_e/gcma000b11a_e', 
                'gcma000b11a_e', 
                default_encoding='iso-8859-15')

default_encoding变量更改readshapefile函数的编码。

相关内容

  • 没有找到相关文章

最新更新