gdal中文乱码-GDAL11.1版本不支持中文路径,读取shp文件属性字段出现乱码

问题描述

GDAL11.1版本不支持中文路径,读取shp文件属性字段出现乱码

首先读取带有中文路径的shp文件,代码如下:

 string strShpFullName = @"G:学习资料ArcGIS空间数据ATShpBoundaryChina_Boundary.shp";
            //注册Ogr
            Ogr.RegisterAll();
            OSGeo.GDAL.Gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");
            //读取字段属性值时设置,否则有中文乱码
            OSGeo.GDAL.Gdal.SetConfigOption("SHAPE_ENCODING", "NO");
            DataSource ds = Ogr.Open(strShpFullName, 0);
            if (ds == null)
            {

            }
            Layer layer = ds.GetLayerByName(Path.GetFileName(strShpFullName));
            if (layer == null)
            {

            }

将“GDAL_FILENAME_IS_UTF8”设置为“NO”,结果DataSource为空,如下图:

如果将“GDAL_FILENAME_IS_UTF8”设置为“YES”,DataSource不为空,但是DataSource得属性Name中含有乱码,如下图:

这是什么问题??跪求答案。。。。。

第二个问题:读取shp文件的属性表,出现中文乱码,但是我已经设置了“OSGeo.GDAL.Gdal.SetConfigOption("SHAPE_ENCODING", "NO");”,为什么还会出现这种问题,在GDAl10.0中就没出现

解决方案

补充:当然 ,这句还是要的,
OSGeo.GDAL.Gdal.SetConfigOption("SHAPE_ENCODING", "gb2312");
有的人说 OSGeo.GDAL.Gdal.SetConfigOption("SHAPE_ENCODING", "");也可以,确实也可以,这个应该返回当前默认代码页。

解决方案二:

好吧,我今天正好碰到这个问题,网上一堆办法都治标不治本,我愤怒了,给一个我的解决方法:
具体思路如下,引入命名空间,using System.Runtime.InteropServices,声明一个DllImport函数。

将所有调用GetFiledAsString的地方,修改为

因为SWIG自动包装处理的不到位,是的多字节字符串和中文字符串(双字节)之间的处理不正确。第一个函数是引入GDAL中OGR的CAPI接口,该接口为一组C的导出函数,在OGR的不同版本之间保持稳定。传入参数handle是Feature的句柄和字段索引值。handle就是C++中Feature类的指针。再看ogr.Feature.getCPtr(feature)函数。因为ogr的c#是swig包装C++而成,swig提供了由C#对象返回指向c++对象的能力,因此相当于在C++的Feature对象上调用GetFieldAsString。因为字符串指针是个地址,因此返回IntPtr,在利用Marshal直接解码就可以了。

时间: 2024-11-02 18:49:58

gdal中文乱码-GDAL11.1版本不支持中文路径,读取shp文件属性字段出现乱码的相关文章

中文排序-TableSort最新版如何支持中文汉字排序

问题描述 TableSort最新版如何支持中文汉字排序 最新版本链接:http://mottie.github.io/tablesorter/docs/index.html#Download 用完发现不支持中文排序,求修改支持方法. 解决方案 jQuery.tablesorter 2.0中文排序解决办法

mapx5.02.19 不支持中文显示,求问该如何解决

问题描述 mapx5.02.19 C#写的,就是对MapXLib.Featureftr; 对ftr.KeyValue赋值//此处添加labelftr.KeyValue="张三"就开始报错误,请教该如何解决 解决方案 解决方案二:报错的内容是什么?解决方案三:csdn论坛上提问过,说是版本不支持中文,想有没有好的解决方式,我用的版本是mapx5.02.19 版本还不够需要mapx5.02.25以上解决方案四:引用1楼cuit的回复: 报错的内容是什么? 报错的内容是尝试读取或写入受保护的

如何解决poi3.6版本导出excel中文乱码问题

问题描述 poi使用版本3.6,在进行导出中文后会出现乱码问题.查阅了一些资料,发现在3.0后似乎去掉了setEncoding方法,请问如果坚持使用3.6版本如何解决中文乱码问题.坚持使用原因的是项目中有很多地方使用了3.6的个别方法.谢谢 问题补充:梦中有你 写道 解决方案 恩 那就可以肯定不是写入之前的乱码,是Excel那边的问题了对了,那个Excel可以设置单元格值类型的 ,数字.日期.文本等待,看看是不是这个的事我写了一个JXL操作EXCEL的 我博客里有 那个我用 的时候就没乱码解决方

汉化-如何在安装自定义linux时支持中文安装

问题描述 如何在安装自定义linux时支持中文安装 现在想支持一个自定义的linux系统,在安装时能支持中文安装,目前如果直接将安装脚本 里的dialog中的英文改为中文,中文显示的是乱码,网上查了下很多linux 中文乱码问题都 说是缺少中文语言包,但是我现在是在安装系统的时候,而不是系统安装完了再去安装语言包 ,就想安装很多linux系统时可以选择中文安装,那么后面的过程都显示中文,有没有哪位大神搞过这方面的,急,求救啊! linux, 汉化,中文乱码,dialog 解决方案 你去找中文的安

让CodeIgniter的ellipsize()支持中文截断的方法_php实例

CodeIgniter的Text Helper有一个ellipsize()方法,用来过滤HTML标签并且截断文字十分好用.但是它对中文支持的特别不好,在中文中使用就有乱码出现. 下面有网友将function ellipsize()进行了修改,使得它支持中文: 在CI 2.1.3版本中,修改ci_2.1.3\system\helpers\text_helper.php 文件 复制代码 代码如下: function ellipsize($codepage = 'UTF-8',            

查看修改mysql编码方式让它支持中文(gbk或者utf8)_Mysql

MySQL的默认编码是Latin1,不支持中文,要支持中文需要把数据库的默认编码修改为gbk或者utf8. 1.需要以root用户身份登陆才可以查看数据库编码方式(以root用户身份登陆的命令为:>mysql -u root –p,之后两次输入root用户的密码),查看数据库的编码方式命令为: >show variables like 'character%'; +--------------------------+----------------------------+ | Variab

在Unix/Linux上令(java)JVM支持中文输出

unix|中文 原文: 在Unix/Linux上令(java)JVM支持中文输出 一.在Unix/Linux上令JVM支持中文输出 如果用户使用的是UNIX的远程服务器,就会遇到中文字体在图像中输出的问题,特别是由于许多管理员并不喜欢把主机的locale定为zh(因为意味着可能出乱码或必须装微形图形终端象zhcon,但很多情况下这样的条件并不具备).大部分程序员的JAVA经验苟限于JSP脚本程序,部分熟练的程序员大概开发过中间件.servlet.applet或在WINDOWS上运行的GUI程序.

真正无组件图文混合上传,功能强大,无须数据库,支持中文!

上传|数据|数据库|无组件|中文     受本论坛某些帖子启发,于是动手编写了这个程序.该程序支持任何文本和二进制格式文件的上传:支持文件表单域和普通表单域混合上传:支持中文文件名:支持覆盖上传和文件同名时自动修改文件名:支持同时上传多个文件,而且多个文件表单域名可以相同:支持上传文件大小的控制-- 我自己感觉很不错哟:)     本程序无须任何数据库支持,直接将上传的文件保存到服务器指定的路径下.    测试环境:Windows2000 + IIS 5.0(对ADO版本有要求)    已知BU

TOMCAT+JIVE的安装配置(支持中文)

中文 0.已经安装了APACHE及JDK.否则安装之.本机安装版本为apache1.3,JDK为1.3.1(不能使用JDK1.4.0,因为在后面JIVE的安装中在编译一个JAVA文件的时候会遇到类申明重叠的问题,缘于jdk1.4.0的java.sql包和java.beans包都包含类Statement,而在jdk1.3.1中,java.beans包不包含Statement类,而该文件导入包的方式为: import java.sql.*; import java.beans.*;) 1.下载TOM