gdb中文乱码_GDAL写入FileGDB中文属性乱码问题

当使用GDAL的FileGDBAPI库驱动创建gdb并写入中文属性值时,可能出现乱码。问题源于FGdbUtils.cpp中宽字节和窄字节转换函数的编码指定不当。通过修改GDAL源码,增加配置项FILEGDB_ENCODING指定输入字符编码,如CP936(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)

{

wchar_t* pszUTF16 = CPLRecodeToWChar( utf8string.c_str(), CPL_ENC_UTF8, CP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值