解决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 运算符 供重载参考
Jun 11 Python
Python 正则表达式(转义问题)
Dec 15 Python
Python实现的排列组合计算操作示例
Oct 13 Python
Python实现的rsa加密算法详解
Jan 24 Python
python给微信好友定时推送消息的示例
Feb 20 Python
详解Python 解压缩文件
Apr 09 Python
更新pip3与pyttsx3文字语音转换的实现方法
Aug 08 Python
python使用 __init__初始化操作简单示例
Sep 26 Python
python爬虫开发之urllib模块详细使用方法与实例全解
Mar 09 Python
在脚本中单独使用django的ORM模型详解
Apr 01 Python
MxNet预训练模型到Pytorch模型的转换方式
May 25 Python
Django使用channels + websocket打造在线聊天室
May 20 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
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
php采集自中央气象台范围覆盖全国的天气预报代码实例
2015/01/04 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
javascript写的日历类(基于pj)
2010/12/28 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
javascript实现的一个随机点名功能
2014/08/26 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
使用Python编写vim插件的简单示例
2015/04/17 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
Django框架 querySet功能解析
2019/09/04 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
HTML5中的websocket实现直播功能
2018/05/21 HTML / CSS
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
利用异或运算实现两个无符号数的加法运算
2013/12/20 面试题
宿舍卫生检讨书
2014/01/16 职场文书
课改先进个人汇报材料
2014/01/26 职场文书
消防器材管理制度
2014/01/28 职场文书
2014庆六一活动方案
2014/03/02 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
2014年党建工作汇报材料
2014/11/02 职场文书
家长高考寄语
2015/02/27 职场文书
2015年小学一年级班主任工作总结
2015/05/21 职场文书
nginx proxy_cache 缓存配置详解
2021/03/31 Servers
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL