Qt中c++库fstream打开中文路径失败,显示和保存中文失败

32 篇文章 10 订阅
文章讲述了在Qt环境下,使用fstream读取GBK编码的中文文件时出现乱码的问题。解决方案是通过QTextCodec转换编码,将UTF-8的路径转换为GBK,以便正确打开和读取文件。同时,提到了UTF-8和GBK编码的特点及转换过程。
摘要由CSDN通过智能技术生成

打开中文路径失败解决办法

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百口可乐__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值