您的位置:首页 > 其它

使GDAL库支持中文路径或中文文件名的处理方法

2016-11-16 13:43 453 查看
之前生成的gdal 2.1.1动态库,在通过命令行执行时,遇到有中文路径或中文图像名时,GDALOpen函数不能正确的被调用,如下图:



解决方法:

1. 在所有使用GDALAllRegister();语句后面加上一句CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO");

2. 修改源码:将frmts/gdalallregister.cpp文件中GDALAllRegister()函数体内最上面加是一条CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO");语句。

这里采用的是第一种方法,修改后的测试代码如下:

int test_gdal_support_chinese_path(int argc, char* argv[])
{
if (argc < 2) {
fprintf(stderr, "params fail\n");
return -1;
}

GDALAllRegister();
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");

GDALDataset* poSrc = (GDALDataset*)GDALOpen(argv[1], GA_ReadOnly);
if (poSrc == nullptr) {
std::cout << "input image error" << std::endl;
return -1;
}

int width_src = poSrc->GetRasterXSize();
int height_src = poSrc->GetRasterYSize();
int band_count_src = poSrc->GetRasterCount();
fprintf(stderr, "image width: %d, height: %d, bandCount: %d\n", width_src, height_src, band_count_src);
GDALDataType gdal_data_type = poSrc->GetRasterBand(1)->GetRasterDataType();
int depth = GDALGetDataTypeSize((GDALDataType)gdal_data_type);
fprintf(stderr, "depth: %d\n", depth);

GDALClose((GDALDatasetH)poSrc);

return 0;
}


结果如下图:



如果使用到OGRAllRegiser()函数,为了支持中文,那么也需要作同样的修改。

GitHubhttps://github.com/fengbingchun/GDAL_Test
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: