解决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之大话题小函数(1)

    “跟老齐学Python之大话题小函数(1)”是一篇介绍Python函数的教程,主要包括函数定义、传递参数、返回值、作用域等内容。以下是教程的完整攻略: 函数定义 在Python中,使用def关键字定义一个函数,如下所示: def function_name(parameters): function_body 其中,function_name是函数的名称,p…

    python 2023年5月30日
    00
  • python中从str中提取元素到list以及将list转换为str的方法

    在Python中,可以使用字符串和列表来存储一组有序的元素。有时候需要从字符串中提取元素到列表中,或者将列表转换为字符串。本文将详介绍中从字符串中提取元素到列表以及将列表转换为字符串的方法,包括方法、示例等。 从字符串中提取元到列表 可以使用split()方法将字符串分割成一个列表,也可以使用列表推导式将字符串中的每个字符转换为列表中的一个素。例如: # 从…

    python 2023年5月13日
    00
  • python中的函数用法入门教程

    Python中的函数用法入门教程 函数是Python中的重要概念之一,是指一段代码可以重复使用的方便模块。在Python中,函数可以接收参数,执行一系列操作并最终返回结果。本文将重点介绍Python中的函数用法,为初学者提供参考。 函数的定义 在Python中,可以使用def关键字定义函数。函数定义格式一般如下: def 函数名(参数1, 参数2, …)…

    python 2023年5月30日
    00
  • python中多层嵌套列表的拆分方法

    Python中多层嵌套列表的拆分方法 在Python中,我们可以使用循环和递归的方法来拆分多层嵌套列表。本攻略将详细介绍如何拆分多层嵌套列表。 使用循环拆分多层嵌套列表 以下是一个示例代码,演示如何使用循环拆分多层嵌套列表: # 使用循环拆分多层嵌套列表 nested_list = [1, [2, [3, 4], 5], 6, [7, 8]] flat_li…

    python 2023年5月13日
    00
  • 带有变量赋值的 Python 隐式 if 语句——这是如何工作的? [复制]

    【问题标题】:Python Implicit if statement with variable assignment — How does this work? [duplicate]带有变量赋值的 Python 隐式 if 语句——这是如何工作的? [复制] 【发布时间】:2023-04-02 05:08:01 【问题描述】: 我在上个月开始学习 p…

    Python开发 2023年4月8日
    00
  • 如何在 openstack grizzly 中使用 python API 0.11.0 设置图像元数据?

    【问题标题】:How to set image metadata with python API 0.11.0 in openstack grizzly?如何在 openstack grizzly 中使用 python API 0.11.0 设置图像元数据? 【发布时间】:2023-04-05 01:49:02 【问题描述】: 我使用DevStack-Gri…

    Python开发 2023年4月6日
    00
  • Python文本特征抽取与向量化算法学习

    Python文本特征抽取与向量化算法学习 1. 什么是文本特征抽取和向量化? 在文本处理中,我们通常需要将文本转换为计算机可处理的形式,即向量化。文本向量化的过程分为两个步骤,即文本特征抽取和向量化。 文本特征抽取是指从文本中提取有用的特征,常见的有词袋特征、N-gram特征、TF-IDF特征等。其中,词袋特征是将文本中出现的所有单词视为一个集合,然后用每个…

    python 2023年6月5日
    00
  • Python进程,多进程,获取进程id,给子进程传递参数操作示例

    下面是详细的Python进程、多进程相关操作攻略。 Python进程 首先我们需要了解什么是进程。进程是指正在运行的程序,让电脑处理我们所需要的任务。在Python中,我们可以使用 os 模块来进行进程相关操作。 获取进程ID 要获取当前进程的ID,可以使用 os 模块的 getpid() 函数. 下面是一个示例程序: import os print(&qu…

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