解决python ogr shp字段写入中文乱码的问题

解决python ogr shp字段写入中文乱码的问题,可以按照以下步骤进行操作:

  1. 设置系统编码为utf-8

在Python中,字符串默认使用ASCII编码。为了避免中文出现乱码的问题,在进行编码转换时,需要将系统编码设置为utf-8。

示例代码:

import sys

reload(sys)
sys.setdefaultencoding('utf-8')
  1. 设置 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技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • python操作xlsx格式文件并读取

    下面是详细讲解“python操作xlsx格式文件并读取”的完整实例教程。 准备工作 在开始之前,需要安装openpyxl模块,可以使用pip命令进行安装,命令如下: pip install openpyxl 安装完成后,在python脚本中导入openpyxl模块即可。 读取xlsx文件 读取xlsx文件需要使用openpyxl模块中的load_workbo…

    python 2023年5月13日
    00
  • 如何从 python 脚本成功调用 gsutil rsync?

    【问题标题】:How do you successfully invoke gsutil rsync from a python script?如何从 python 脚本成功调用 gsutil rsync? 【发布时间】:2023-04-07 14:42:01 【问题描述】: 我正在尝试执行以下行 gsutil -m rsync s3://input gs:…

    Python开发 2023年4月8日
    00
  • Python enumerate遍历数组示例应用

    Python enumerate遍历数组示例应用 简介 在Python中,我们可以使用for循环遍历数组。然而,在有些情况下,我们需要同时获取数组中元素的下标和数值。Python提供了enumerate函数来实现这一功能。本篇文章将详细讲解如何使用Python的enumerate函数遍历数组,并提供两个示例说明。 enumerate函数的用法 Python中…

    python 2023年6月5日
    00
  • 20行python代码的入门级小游戏的详解

    下面是“20行python代码的入门级小游戏的详解”。 简介 这个小游戏是一个猜数字游戏,它只需要20行python代码就可以写出来。通过这个游戏,我们可以学习到Python的基础语法,包括条件语句、循环语句、函数等。 代码 下面是完整的Python代码: import random def guess(x): random_number = random.…

    python 2023年5月19日
    00
  • 基于python实现名片管理系统

    以下是详细的攻略: 1. 确定需求 作为一款名片管理系统,肯定要起码包含以下功能: 添加名片信息 查询名片信息 修改名片信息 删除名片信息 2. 设计数据库 在设计数据库时,根据需求,可以创建一个名为 cards 的表,它至少应包含以下字段: 字段名 类型 说明 id int 自增主键 name varchar(50) 姓名 phone varchar(20…

    python 2023年6月3日
    00
  • python之openpyxl模块的安装和基本用法(excel管理)

    Python之Openpyxl模块的安装和基本用法(Excel管理) 安装 使用pip命令进行安装,命令如下: pip install openpyxl Excel 文档读取 打开Excel文档 使用Openpyxl模块可以方便的打开Excel文档。示例代码如下: from openpyxl import load_workbook # 打开一个已经存在的E…

    python 2023年5月13日
    00
  • Python命令行参数化的四种方式详解

    Python命令行参数化的四种方式详解 Python命令行参数化是在脚本调用时,通过命令行向脚本传递参数的一种方式。本文介绍Python命令行参数化的四种方式及其使用方法。 1. 使用sys模块 Python中的sys模块提供了一个名为argv的列表,该列表以字符串形式包含了命令行参数。通过该列表,我们可以轻松地对命令行参数进行处理。下面是一个使用sys模块…

    python 2023年6月2日
    00
  • python字符串切片及常用方法示例详解

    Python的字符串是一种非常重要的数据类型,经常在我们的开发中使用。对于字符串的切片和各种常用方法,失误是我们必须要掌握的。 Python字符串切片 字符串切片是指对字符串进行裁剪,获取其一部分的操作,Python中字符串的切片使用切片运算符[ ],语法格式为: str[start:end:step] 其中: str:表示要进行切片操作的字符串。 star…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部