解决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生成器generator之next和send的运行流程(详解)
May 08 Python
python字符串过滤性能比较5种方法
Jun 22 Python
python基础while循环及if判断的实例讲解
Aug 25 Python
python爬取微信公众号文章
Aug 31 Python
500行Python代码打造刷脸考勤系统
Jun 03 Python
python多进程并行代码实例
Sep 30 Python
使用python模拟高斯分布例子
Dec 09 Python
python实现翻译word表格小程序
Feb 27 Python
详解python中groupby函数通俗易懂
May 14 Python
python如何获得list或numpy数组中最大元素对应的索引
Nov 16 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
Nov 18 Python
python中pyqtgraph知识点总结
Jan 26 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
php MsSql server时遇到的中文编码问题
2009/06/11 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
DEFER怎么用?
2006/07/01 Javascript
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
javascript获取作用在元素上面的样式属性代码
2012/09/20 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
2013/01/18 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
2015/03/25 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
Ext JS动态加载JavaScript创建窗体的方法
2016/06/23 Javascript
Javascript Function.prototype.bind详细分析
2016/12/29 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
2017/04/29 jQuery
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
2019/11/19 Javascript
[03:07]2015国际邀请赛选手档案EHOME.rOtK 是什么让他落泪?
2015/07/31 DOTA
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
python opencv3实现人脸识别(windows)
2018/05/25 Python
Django CBV类的用法详解
2019/07/26 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
python 异步async库的使用说明
2020/05/04 Python
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
Shopee越南:东南亚与台湾电商平台
2019/02/03 全球购物
Ajax的优点和缺点
2014/11/21 面试题
旅游市场营销方案
2014/03/09 职场文书
竞选班长的演讲稿
2014/04/24 职场文书
活动总结怎么写啊
2014/05/07 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
alibaba seata服务端具体实现
2022/02/24 Java/Android
利用Java连接Hadoop进行编程
2022/06/28 Java/Android