GDAL写入FileGDB中文属性乱码问题

当使用GDAL的FileGDBAPI库驱动创建FileGDB并写入中文属性时,可能出现乱码。问题源于FGdbUtils.cpp中宽字节和窄字节转换函数未正确处理编码。通过修改GDAL源码,新增配置项FILEGDB_ENCODING指定输入字符编码(如CP936),并在使用时设置该选项,可以解决乱码问题。命令行或代码中设置FILEGDB_ENCODING为GBK编码可正常显示中文。
摘要由CSDN通过智能技术生成

GDAL库中提供了两个驱动来访问FileGDB格式,一个是基于ESRI提供的FileGDBAPI库来访问gdb,支持读写,另外一个是gdal自己写的OpenFileGDB驱动来访问,只支持读,不支持写。

本文主要是针对ESRI提供的FileGDBAAPI库的驱动来说。只用FileGDB驱动创建gdb时,再写入中文属性值时,会出现乱码,下面给出解决方案。

在FileGDB的文件夹中,有个FGdbUtils.cpp的问题,其中定义了两个函数,原型如下:

 

std::wstring StringToWString(const std::string& s);
std::string WStringToString(const std::wstring& s);

这两个函数的目的就是宽字节和窄字节相互转换。但是在转换过程中对于编码指定的问题导致转换结果不对,从而导致写入gdb文件中的中文属性值乱码。

 

下面是gdal库中对于上述两个函数的实现:

 

/*************************************************************************/
/*                          StringToWString()                            */
/*************************************************************************/

std::wstring StringToWString(const std::string& utf8string)
{
    
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值