gdal是gis领域一款常用的软件。但是如果图片的名称含有中文,gdal就难以将其打开。网上有许多帖子针对这个问题,比如https://blog.csdn.net/liminlu0314/article/details/6610069 但是经我亲测,并不能解决问题。下面给出我亲测可行的办法。
根据网上一篇文档所述(作者平芜泫public@korepwx.com),QString以utf-16的格式存储字符串。但是gdal只是根据文件名是否是utf-8编码,来决定如何读取文件名。所以,只要把qstring转化为utf-8编码的字符串,同时把设置gdal用utf-8来读取文件名即可。
1 qstring转化为utf-8
一般首先想到qstring.toLatin1()。latin1是西欧多字节编码,不是utf-8,故不正确;
正确的办法是
QString qstr;//文件名
QByteArray qa = QTextCodec::codecForName("utf-8")->fromUnicode(qstr);//qa现在存储的是文件名的utf-8编码
GDALDataset* img = (GDALDataset *)GDALOpen(qa.data(), GA_ReadOnly);
.....
2 gdal方面,在注册gdal之后(GDALAllRegister),立刻设置:
GDALAllRegister(); //GDAL所有操作都需要先注册格式
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "YES"); //支持中文路径