打开中文路径失败解决办法
string filePath = sourceDir.toStdString()+"/"+drugName.toStdString()+".txt";
ifstream inFile;
QTextCodec *code = QTextCodec::codecForName("GB2312");
string selectedFile = code->fromUnicode(filePath.c_str()).data();
inFile.open(selectedFile.c_str(),ios::in);
qt中使用fstream读取包含中文的文件失败,使用qDebug输出乱码,而用cout输出却是正确的中文字符。
参考链接:https://blog.csdn.net/weixin_43197380/article/details/122476491
常见的两种编码是:UTF-8和GBK:
UTF-8:编码包含全世界所有国家需要用的字符,它比较灵活,长度在1-6个字节,UTF-8编码格式很强大,支持所有国家的语言,如果你的网站涉及到多个国家的语言,那么建议你选择UTF-8编码。正是因为它的强大,才会导致它占用的空间大小要比GBK大,对于网站打开速度而言,也是有一定影响的。
GBK:编码主要用中文编码,包含全部中文字符,GBK的长度为2个字节,所以和GBK相比,UTF-8会占用更多的数据库储存空间。对于GBK编码格式,虽然它的功能少,仅限于中文字符,但它所占用的空间大小会随着它的功能而减少,打开网页的速度比较快。
GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:
GBK、GB2312--Unicode--UTF8
UTF8--Unicode--GBK、GB2312
Qt默认采用utf-8编码,不能显示Windows默认的本地字符编码(GBK/GB2312/GB18030),使用fromLocal8Bit()函数,将源字符集(utf-8编码)转为执行字符集即loacl字符集(GBK编码),解决中文乱码。
inFile.getline(buff,sizeof(buff));
qDebug()<<QString::fromLocal8Bit(buff);
而保存中文则需要
QString qs = "哈哈";
string s = qs.toLocal8Bit().toStdString();
cout<<s;