fopen无法打开QFileDialog选择的中文路径文件最简解决方法

QT项目fopen打开中文路径文件问题修改

一.问题背景

  1. 公司项目中用到的资源采用了自定义的压缩包格式,所有资源会被打包成bin文件。
  2. 公司已有C语言版本的解压文该文件的代码。且不允许浪费额外人力成本去移植成QT的代码。
  3. 客户要改动bin目录到中文路径。从而导致fopen bin文件打开失败。

二.尝试解决

bin文件路径是通过 QFileDialog::getOpenFileName 函数获取的。

  1. 对bin文件路径进行转码,转成UTF8,转换原因是bin路径的QString对应的byteArray中每个中文是3个字节,符合UTF8 【无效果】
  2. 直接将fopen 更换为 _wfopen函数 【成功】

三.成功总结

这个问题主要是编码不匹配问题。程序编码,程序代码文件编码,以及电脑系统默认编码。需要做好编码统一。

  1. 程序编码:
    一般我们在程序人口通过QTextCodec::setCodecForTr(QTextCodec::codecForName(“UTF-8”));来指定程序采用何种编码
  2. 代码编码:
    代码编码是.cpp, .h 文本文件的的编码
  3. 系统编码:
    诸如windows默认是GBK,如果咱们不设置程序编码,QFileDialog获取的路径其实也就是GBK编码。
    此处我们未做设置,因此程序走的是宽字符编码,所以fopen函数无法打开GBK格式编码的路径。而使用_wfopen就可以。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值