<div dir="ltr">D<div style="font-family:tahoma,sans-serif;display:inline" class="gmail_default">​ear, helpful PyQt/Python experts,</div><div style="font-family:tahoma,sans-serif;display:inline" class="gmail_default"><br></div><div style="font-family:tahoma,sans-serif;display:inline" class="gmail_default"><br></div><div style="font-family:tahoma,sans-serif;display:inline" class="gmail_default">I have a problem, receiving a <span style="font-family:monospace,monospace">​UnicodeDecodeError</span>.  The full details are at <a href="https://forum.qt.io/topic/85493/unicodedecodeerror-with-output-from-windows-os-command">https://forum.qt.io/topic/85493/unicodedecodeerror-with-output-from-windows-os-command</a>, in combination with <a href="https://forum.qt.io/topic/85064/python3-pyqt5-x-qbytearray-to-string">https://forum.qt.io/topic/85064/python3-pyqt5-x-qbytearray-to-string</a>.  Here I will try to be brief to cover only the salient points.:</div><div style="font-family:tahoma,sans-serif;display:inline" class="gmail_default"><ol><li>I am spawning a <span style="font-family:monospace,monospace">QProcess</span> under Windows to run an arbitrary OS command, and grab its output to display in a window.</li><li>I use <span style="font-family:monospace,monospace">QByteArray Process.readAllStandardOutput()</span> to receive the child's output in the parent.</li><li>I wish to display it in a dialog window, so I (believe I need to) use <span style="font-family:monospace,monospace">QLineEdit.setPlainText(QString)</span> to do that.</li><li>To achieve that I will need to convert a <span style="font-family:monospace,monospace">QByteArray</span> to a <span style="font-family:monospace,monospace">QString</span>.</li><li>Since neither of these types and their methods are available in PyQt, I asked how to do that in <a href="https://forum.qt.io/topic/85064/python3-pyqt5-x-qbytearray-to-string">https://forum.qt.io/topic/85064/python3-pyqt5-x-qbytearray-to-string</a>.</li><li>The answer I got from a PyQt expert, "jazzycamel", who visited there (and told me to come to this forum in future, which is why I am here now!), was that the Python/PyQt way to do this is to work with its native <span style="font-family:monospace,monospace">bytes</span> & <span style="font-family:monospace,monospace">str</span> types respectively, and use <span style="font-family:monospace,monospace">str = bytes.decode('utf-8')</span> to "convert".</li></ol><p>While this has worked fine under Linux, when a user runs my Qt app under Windows and issues a perfectly normal <span style="font-family:monospace,monospace">robocopy</span> command under a standard UK Windows with really nothing special/unusual going on with filenames, he gets:</p><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><p><span style="font-family:monospace,monospace">Unhandled Exception:<br><br>'utf-8' codec can't decode byte 0x9c in position 32: invalid start byte<br><br><class 'UnicodeDecodeError'><br>File "C:\HJinn\widgets\messageboxes.py", line 289, in processReadyReadStandardOutput<br>output = output.data().decode('utf-8')</span></p></blockquote><p>I understand this to be a Python/PyQt problem.  I <i>believe</i> if I used the native Qt/C++ calls for this --- which apparently I can't from PyQt --- there would be no issue.</p><p>I have over the years written, say, Windows C programs using standard Windows SDK calls for this kind of "redirector".  I simply grab the output of a sub-process and throw it at whatever the native Windows <span style="font-family:monospace,monospace">SetTextEdit()</span> function is, and all has always been fine.</p><p>Note that I have <i>never</i> had to guess/decode/convert bytes to some text encoding, and this has worked across all platforms forever.  So I really don't expect to have to do so now, unless there's something going on in Qt/PyQt which is fundamentally any different.</p><p></p><p>So... can you please tell me how under Python/PyQt I can just display the output from an OS command (assuming "text-type" output, I don't expect arbitrary binary bytes) without the slightest chance of any kind of "I can't convert" Exception, please?</p><p></p><p>Thank you in advance!<br></p><p><br></p><p><br></p></div><div style="font-family:tahoma,sans-serif;display:inline" class="gmail_default"><br></div></div>