Qt中文路径乱码问题(MSVC编译器)

        一、由于使用GDAL必须在MSVC版本下的Qt中,因此下载了一个MSVC版本的Qt,但是在显示中文、利用GDALOpen函数读取图像、选择文件夹、写入图像时都不能有中文字符,如果有则显示为乱码。比如我想利用打开文件对话框传递fileName给GDAL打开函数,直接传递是不行的,因为GDALOpen第一个参数必须是const char*,而fileName必须是QString类型,因此需要两者进行转换,即QString转const char*,在网上能查到许多方法,比如
QByteArray b = fileName.toLatin1();
const char* c = b.data();

或者
QByteArray b = fileName.toLocal8Bit();
const char* c = b.data();

或者
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif

或者
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO");
或者改变编码等等,笔者都试了依然不行,几经尝试发现QString对象有一个toUtf8();函数,即
QByteArray b = fileName.toUtf8();
const char* c = b.data();

发现此时c能显示中文,但是要将CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO");删除;

二、总结:在Qt中要想解决上述问题,必须按照下面的方法进行

首先删除CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO");
然后转为Uft8,即
QString fileName = QFileDialog::getOpenFileName(this,"Open Image","",("所有文件(*.*)"));
QByteArray b = fileName.toUtf8();
const char* c = b.data();
GDALDataset* dataSet = (GDALDataset*)GDALOpen(c,GA_ReadOnly);

这样就能能读取中文路径了,但是要在界面上正确显示中文,一个方法是将有中文字符串的地方加到QStringLiteral();函数里面,另一种一劳永逸的方法是在头文件前面加上
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif

强制编译后的执行文件采用UTF-8编码。
MSVC2010以后的编译器可以使用此方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值