关于QT开发的32位程序不能运行在包含中文的目录中

问题描述:

用QT开发了一个32位客户端(QT版本是 5.14.1 32位),Release运行一切正常,将release中的exe 使用 windeployqt 工具进行打包,打包后运行exe文件在只有英文的目录中运行一切正常,将包含这个exe的目录名称加入中文后 运行 程序崩溃,这个时候同级目录会生成一个debug.log文件

debug.log文件内容:[0603/162106.739:ERROR:icu_util.cc(170)] Invalid file descriptor to ICU data received.

问题描述是找不到icudtl.dat文件,因为目录加入了中文所有导致找不到icudtl.dat文件,这个不是重点,重点是目录里面有中文

 

以下情况可以正常运行

1,QT 64位的程序运行一切正常,目录中有没有中文都可以正常运行

2,QT 32位程序 只要目录不包含中文,运行一切正常,有一个中文就运行不起来

我要解决的问题是 QT开发的32位程序,如何能在包含有中文的目录中双击运行?

先谢谢可以帮我解决问题的朋友。

 

该问题本人已自己解决,解决方法在此记录一下:

在包含打包后生的exe文件的目录中创建 qt.conf 文件,并且在里面指定 resources 的路径为相对路径,配置如下:

[Paths]
Plugins = ./plugins resources = ./resources translations = ./translations

之后双击运行程序可正常运行,因为他将通过相对路径查找  icudtl.dat 文件,如果不指定路径程序会通过物理路径查找,物理路径中带有中文的时候,32位程序就会崩溃

建议检查一下编码是否正确,一般用utf-8不容易出现问题。或者可以尝试搜索一下icudtl.dat这个文件是否存在,并对比一下其在64位和32位编译后的路劲是否一致。