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