【发布时间】:2017-01-20 10:16:53
【问题描述】:
我有以下代码来启动 .bat 文件并读取进程的输出:
def WriteFirmwareButtonEvent(self):
self.process = QProcess(self)
self.process.setProcessChannelMode(QProcess.MergedChannels)
self.process.readyReadStandardOutput.connect(self.EventDataForReadFromCMD)
self.process.start("run.bat")
def EventDataForReadFromCMD(self):
...
我试过了:
...
output = bytearray(self.process.readAllStandardOutput())
output = output.decode(xxx)
print (output)
但是任何编码都会给我关于解码第 4 个字符的错误 所以我尝试了纯转换为python字符串:
...
output = str(self.process.readAllStandardOutput())
print (output)
会给我:
b'Syst\x82m nem\x85\xa7e nal\x82zt uvedenou cestu.\r\n'
...
output = QByteArray(self.process.readAllStandardOutput())
test = QTextCodec.codecForLocale()
test = test.toUnicode(output)
编码时未知字符 4 也有同样的问题
但是如果我从 CMD 输出手动运行脚本应该是这样的:
系统 nemůže nalézt uvedenou cestu。
QProcess 的输出是否有一些特殊编码?以及他的阅读方法?
我现在唯一能做的就是为每个未知字符定义我自己的编码循环,我希望有更好的解决方案。
【问题讨论】:
-
你看
QString::fromLocal8Bit()和QTextCodec::codecForLocale()了吗? -
PyQt5 不再有 QString
-
我相信
QTextCodec仍然可用。 -
我遇到了同样的问题未知字符:/请检查更新后的问题
标签: python string qt python-3.x pyqt5