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函数无法打开utf8格式编码的路径。而使用_wfopen就可以。

版权声明:本文为iqw17532原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。