QProcess 带重音符号的输入字符串
QProcess input string with accents
我有两个程序,每个程序都带有 QProcess,并且我对带有重音字符的 QProcess 输入有不同的行为
(更准确地说,我创建了一个 Qprocess 来执行一个 dos copy
命令并且路径带有重音符号)。
执行开发环境Windows10.
第一个程序是我制作的一个简单原型,用于测试我的代码是否可以正常工作。
这是我的原型代码,其中副本工作正常,集成在一个简单的 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
路径,就好像重音符号不存在一样更多支持。
这是我在更大的项目中 copy/paste 的部分,我现在通过在 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 5.15 重新创建你的行为,并且可以创建一个带有
重音的文件
start("cmd",{args...})
start("cmd /c args...")
setNativeArguments("/c args...")
+ start("cmd")
最后一个推荐给“cmd”调用,看这里的备注:
https://doc.qt.io/qt-5/qprocess.html#start
唯一没有用的,因为它死锁了
setArguments({args...})
+ start("cmd")
此处演示:
https://gist.github.com/elsamuko/59f110cf3a678beae9db27860f6305c9
我有两个程序,每个程序都带有 QProcess,并且我对带有重音字符的 QProcess 输入有不同的行为
(更准确地说,我创建了一个 Qprocess 来执行一个 dos copy
命令并且路径带有重音符号)。
执行开发环境Windows10.
第一个程序是我制作的一个简单原型,用于测试我的代码是否可以正常工作。
这是我的原型代码,其中副本工作正常,集成在一个简单的 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
路径,就好像重音符号不存在一样更多支持。
这是我在更大的项目中 copy/paste 的部分,我现在通过在 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 5.15 重新创建你的行为,并且可以创建一个带有
重音的文件start("cmd",{args...})
start("cmd /c args...")
setNativeArguments("/c args...")
+start("cmd")
最后一个推荐给“cmd”调用,看这里的备注:
https://doc.qt.io/qt-5/qprocess.html#start
唯一没有用的,因为它死锁了
setArguments({args...})
+start("cmd")
此处演示:
https://gist.github.com/elsamuko/59f110cf3a678beae9db27860f6305c9