一.问题背景
- 公司项目中用到的资源采用了自定义的压缩包格式,所有资源会被打包成bin文件。
- 公司已有C语言版本的解压文该文件的代码。且不允许浪费额外人力成本去移植成QT的代码。
- 客户要改动bin目录到中文路径。从而导致fopen bin文件打开失败。
二.尝试解决
bin文件路径是通过 QFileDialog::getOpenFileName 函数获取的。
- 对bin文件路径进行转码,转成UTF8,转换原因是bin路径的QString对应的byteArray中每个中文是3个字节,符合UTF8 【无效果】
- 直接将fopen 更换为 _wfopen函数 【成功】
三.成功总结
这个问题主要是编码不匹配问题。程序编码,程序代码文件编码,以及电脑系统默认编码。需要做好编码统一。
- 程序编码:
一般我们在程序人口通过QTextCodec::setCodecForTr(QTextCodec::codecForName(“UTF-8”));来指定程序采用何种编码 - 代码编码:
代码编码是.cpp, .h 文本文件的的编码 - 系统编码:
诸如windows默认是GBK,如果咱们不设置程序编码,QFileDialog获取的路径其实也就是GBK编码。
此处我们未做设置,因此程序走的是宽字符编码,所以fopen函数无法打开utf8格式编码的路径。而使用_wfopen就可以。
版权声明:本文为iqw17532原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。