使GDAL库支持中文路径或中文文件名的处理方法
生活随笔
收集整理的這篇文章主要介紹了
使GDAL库支持中文路径或中文文件名的处理方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
之前生成的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()函數,為了支持中文,那么也需要作同樣的修改。
GitHub:https://github.com/fengbingchun/GDAL_Test
總結
以上是生活随笔為你收集整理的使GDAL库支持中文路径或中文文件名的处理方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人脸识别引擎SeetaFaceEngin
- 下一篇: 人脸识别引擎SeetaFaceEngin