解决python ogr shp字段写入中文乱码的问题,可以按照以下步骤进行操作:
- 设置系统编码为utf-8
在Python中,字符串默认使用ASCII编码。为了避免中文出现乱码的问题,在进行编码转换时,需要将系统编码设置为utf-8。
示例代码:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
- 设置 ogr 数据源编码为 utf-8
在使用 ogr 库生成 shp 文件时,默认的编码是 gbk。为了避免中文出现乱码的问题,需要将 ogr 数据源编码设置为 utf-8。
示例代码:
from osgeo import ogr
driver = ogr.GetDriverByName('ESRI Shapefile')
ds = driver.CreateDataSource('test.shp')
layer = ds.CreateLayer('test', geom_type=ogr.wkbPoint)
layer.CreateField(ogr.FieldDefn('name', ogr.OFTString))
layer.CreateField(ogr.FieldDefn('nameutf8', ogr.OFTString))
for i in range(3):
feature = ogr.Feature(layer.GetLayerDefn())
feature.SetField('name', '中文')
feature.SetField('nameutf8', '中文'.encode('utf-8'))
point = ogr.Geometry(ogr.wkbPoint)
point.AddPoint(i, i)
feature.SetGeometry(point)
layer.CreateFeature(feature)
在上面的示例代码中,我们创建了一个名为“test”的 shp 文件,其中设置了两个属性字段:name 和 nameutf8。将中文字符串“中文”分别赋值给这两个属性字段。在 name 属性字段中,由于 ogr 默认使用 gbk 编码,因此会出现乱码。而在 nameutf8 属性字段中,我们进行 utf-8 编码,可以成功输出中文。
除了在 ogr 创建数据源时进行编码设置外,在读取 shp 文件时也需要进行编码设置。
示例代码:
from osgeo import ogr
driver = ogr.GetDriverByName('ESRI Shapefile')
ds = driver.Open('test.shp', 0)
layer = ds.GetLayer()
for feature in layer:
name = feature.GetField('name')
nameutf8 = feature.GetField('nameutf8').decode('utf-8')
print('name:', name)
print('nameutf8:', nameutf8)
在上面的示例代码中,我们打开了刚才创建的 shp 文件,并读取其中的属性字段 name 和 nameutf8。由于 name 属性字段设置了默认编码为 gbk,因此读取到的字符串会出现乱码。而在 nameutf8 属性字段中,进行了 utf-8 编码,因此需要使用 decode 方法将其进行解码,才能成功输出中文。
通过以上两个示例代码,我们就成功解决了 python ogr shp 字段写入中文乱码的问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决python ogr shp字段写入中文乱码的问题 - Python技术站