【发布时间】:2021-02-08 13:08:36
【问题描述】:
我有两个程序,每个程序都带有 QProcess,并且我对带有重音字符的 QProcess 输入有不同的行为
(更准确地说,我创建了一个 Qprocess 来执行 dos copy 命令,并且路径带有重音)。
执行和开发环境为Windows 10。
第一个程序是一个简单的原型,用于测试我的代码是否可以正常工作。
这是我的原型代码,其中副本可以正常工作,集成在一个简单的main() 函数中。
该代码应该将名为 sfx.exe 的文件复制到带有重音符号 F:\path_accentué 的路径中,并且确实正确地进行了复制。
#include <QCoreApplication>
#include <Qdebug>
#include <QObject>
#include <QProcess>
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
QProcess* processus = new QProcess();
QStringList args;
QString path("F:\\path_accentué");
args << "/C" << "copy" << "E:\\test\\sfx.exe" << path;
processus->start("cmd.exe", args);
if (!processus->waitForStarted())
{
qDebug() << "Could not launch the process";
}
//processus->write(s.c_str());
if (!processus->waitForFinished(-1))
{
qDebug() << "Finished";
}
delete processus;
return app.exec();
}
但是,当我在一个更大的代码项目中集成(字面意思是复制和粘贴)这个原型时,我的 QProcess 实例无法识别 accentuated 路径,好像不再支持重音符号一样。
这是我在更大的项目中复制/粘贴的部分,现在我通过在 QT 中单击按钮来执行。
而这一次,QProcess 无法识别重读路径(而是创建一个名称类似于 path_accentu� 的文件)
QProcess* processus = new QProcess();
QStringList args;
QString path("F:\\path_accentué");
args << "/C" << "copy" << "E:\\test\\sfx.exe" << path; processus->start("cmd.exe", args);
if (!processus->waitForStarted())
{
qDebug() << "Could not launch the process";
}
//processus->write(s.c_str());
if (!processus->waitForFinished(-1))
{
qDebug() << "Finished";
}
我在文档中找不到强制QProcess 识别重音输入的方法。
我想了解为什么 QProcess 实例在集成到我的更大项目中时表现不同。
什么可能会影响 QProcess 的行为并导致它在第二种情况下以不同的方式处理输入?
注意: 更多的事情需要 QProcess,而不仅仅是副本(例如获取反馈和操作百分比)。复制只是为了隔离问题。实际上,我做的事情要多得多。
【问题讨论】:
-
很可能较大的项目在如何解释输入文件字符集方面有不同的编译器设置......这两个项目是如何制作的?相同/不同的 Qt 版本?相同/不同的编译器/IDE?
-
@Thx 供您参考。相同的 QT 版本,Visual Studio 2013
-
您确定问题出在口音上吗?它是否适用于您更大项目中的其他路径?
-
当然,我用任何不包含重音的路径进行了测试。