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


Posted in Python onDecember 31, 2018

首先,先确认一下你的字段值是不是乱码,如果是,按照以下方法:

我的字段值是来自于一个geojson字符串,我在对它解析时做了如下处理:

properties = fea.get("properties")
pro_json=json.dumps(properties)
pro_json.replace('u\'','\'')#将unicode编码转化为中文先处理一下
pro_json=pro_json.decode("unicode-escape") #将unicode编码转化为中文
properties=json.loads(pro_json)

这样即可消除字段值中的中文乱码。

字段值没有乱码了,可是这样写入shp,shp中会出现乱码,使用如下方法解决:

首先,你需要用driver方法创建shp文件而不是直接用ogr.open:

driver=ogr.GetDriverByName("ESRI Shapefile")
ds =driver.CreateDataSource(shp_path)#打开要写入的数据源

然后,在driver创建之前加入如下两句:

gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")
gdal.SetConfigOption("SHAPE_ENCODING", "GBK")

成了。

源码如下:

def create_shp_with_geoJson2(a,shp_path):
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")
gdal.SetConfigOption("SHAPE_ENCODING", "GBK")
driver=ogr.GetDriverByName("ESRI Shapefile")
ds =driver.CreateDataSource(shp_path)#打开要写入的数据源
if ds is None:
sys.exit('Could not open this folder!')
if ds.GetLayer('test_polygon'):
ds.DeleteLayer('test_polygon')#如果存在,就删除该数据
feature0=a['features'][0]
geo = feature0.get("geometry")
geo_type = geo.get('type')#获取图层类型
properties = feature0.get("properties")
keys=properties.keys()#获取字段名称数组
if geo_type=='Polygon' or 'MultiPolygon':
ogr_type=ogr.wkbPolygon
else:
if geo_type=='Point':
ogr_type=ogr.wkbPoint
else:
if geo_type=='LineString' or 'MultiLineString':
ogr_type=ogr.wkbLineString
out_lyr=ds.CreateLayer('test_polygon',None,ogr_type)#创建图层
#接下来往图层中写入feature
for key in keys:
field_testfield = ogr.FieldDefn(key, ogr.OFTString)#创建字段
field_testfield.SetWidth(254)
out_lyr.CreateField(field_testfield)
for fea in a['features']:
geometry_json=fea.get("geometry")
properties = fea.get("properties")
pro_json=json.dumps(properties)
pro_json.replace('u\'','\'')#将unicode编码转化为中文先处理一下
pro_json=pro_json.decode("unicode-escape") #将unicode编码转化为中文
properties=json.loads(pro_json)
geom=ogr.CreateGeometryFromJson(str(geometry_json))
out_defn=out_lyr.GetLayerDefn()
out_feat=ogr.Feature(out_defn)
out_feat.SetGeometry(geom)#创建geometry
for i in range(len(keys)):
value=properties.get(keys[i])#获取属性值
print(value)
out_feat.SetField(i,value)
out_lyr.CreateFeature(out_feat)#在图层中插入该要素
if __name__ == '__main__':
create_shp_with_geoJson2(a,'web')

以上这篇解决python ogr shp字段写入中文乱码的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python多重继承新算法C3介绍
Sep 28 Python
Python中的闭包详细介绍和实例
Nov 21 Python
深入学习Python中的上下文管理器与else块
Aug 27 Python
pycharm远程调试openstack代码
Nov 21 Python
python日期时间转为字符串或者格式化输出的实例
May 29 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
教你一步步利用python实现贪吃蛇游戏
Jun 27 Python
python实现集中式的病毒扫描功能详解
Jul 09 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
Aug 06 Python
Python Web框架之Django框架Model基础详解
Aug 16 Python
python zip,lambda,map函数代码实例
Apr 04 Python
python热力图实现简单方法
Jan 29 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 #Python
python爬虫获取小区经纬度以及结构化地址
Dec 30 #Python
python实现播放音频和录音功能示例代码
Dec 30 #Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
Dec 30 #Python
python中partial()基础用法说明
Dec 30 #Python
python读取各种文件数据方法解析
Dec 29 #Python
python 读取鼠标点击坐标的实例
Dec 29 #Python
You might like
人族 TERRAN 概述
2020/03/14 星际争霸
php.ini 中文版
2006/10/28 PHP
15种PHP Encoder的比较
2007/03/06 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
jquery+css实现动感的图片切换效果
2015/11/25 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
2016/06/07 Javascript
使用Script元素发送JSONP请求的方法
2016/06/12 Javascript
Laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的解决方法
2016/08/18 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
2016/09/20 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
微信小程序 两种为对象属性赋值的方式详解
2017/02/23 Javascript
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
2017/06/26 jQuery
vue中各选项及钩子函数执行顺序详解
2018/08/25 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
详解vue2.0模拟后台json数据
2019/05/16 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
2019/09/11 Javascript
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
基于python的汉字转GBK码实现代码
2012/02/19 Python
python获取目录下所有文件的方法
2015/06/01 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
python fabric实现远程部署
2017/01/05 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
Django用户认证系统 User对象解析
2019/08/02 Python
学python安装的软件总结
2019/10/12 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
介绍一下.net和Java的特点和区别
2012/09/26 面试题
资深生产主管自我评价
2013/09/22 职场文书
出纳工作检讨书
2014/10/18 职场文书
2014年营业员工作总结
2014/11/18 职场文书
工作失职自我检讨书
2015/05/05 职场文书
党员进社区活动总结
2015/05/07 职场文书
导游词之西安大清真寺
2019/12/17 职场文书