通过QProcess的8位参数

时间:2015-08-28 09:48:09

标签: bash qt character-encoding

我有一个必须使用ASCII参数启动的应用程序。它将它们视为一个字节数组,因此它必须是ASCII而不是UTF-8等。值可能是非拉丁语(因此它不是真正的ASCII,而是任何代码页,如CP-1251)。
在bash中,我可以将其作为

启动
myapp --myparam $'abc...Z\xC0\xC1...\xFF'

要复制到剪贴板,请将视图切换到纯文本模式
我无法用QProcess找到一种方法...
它似乎没有直接使用bash和启动过程,因此我无法使用$'\xnn' syntax 它也不接受QString以外的形式的params。在将params传递给应用程序之前,没有办法要求它执行QString::toLocal8Bit()(因此我可以使用QTextCodec::setCodecForLocale()欺骗UTF-8与其他代码页)。

有什么想法吗?

更新:
我在下面得到了正确的答案 2,我还发现QProcess将QFile :: encodeName()应用于每个arg,因此可以使用QTextCodec::setCodecForLocale()绕过问题。

1 个答案:

答案 0 :(得分:1)

  

似乎没有直接使用bash和启动进程

您可以从QProcess调用bash并直接执行: -

QString cmd = "bash -c \"myapp --myparam $'abc...Z\xC0\xC1...\xFF'\"";
QProcess proc;
proc.execute(cmd);