通过QProcess打印unicode

时间:2010-06-19 09:04:16

标签: python qt unicode pyqt qprocess

我在处理QProcess的unicode输出时遇到了一些麻烦。当我运行以下示例时,我得到了??而不是中文。谁能告诉我如何获得unicode输出?

from PyQt4.QtCore import *

def on_ready_stdout():
    byte_array = proc.readAllStandardOutput()
    print 'byte_array: ', byte_array
    print 'unicode: ', unicode(byte_array)

proc = QProcess()
proc.connect(proc, SIGNAL('readyReadStandardOutput()'), on_ready_stdout)
proc.start(u'python -c "print \'hello 中文\'"')
proc.waitForFinished()

@serge 我尝试运行修改后的代码,但收到错误:

byte_array:  hello Σ╕¡µ??

unicode:
Traceback (most recent call last):
  File "python_temp.py", line 7, in on_ready_stdout
    print 'unicode: ', unicode(byte_array)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 6: ordinal
not in range(128)

1 个答案:

答案 0 :(得分:0)

我已经改变了你的代码并获得了预期的输出:

byte_array:  hello 中文

unicode:  hello 中文

我的更改是:

  1. 我添加了# - - 编码:utf-8 - - 魔术评论(详情here
  2. 从proc.start调用中删除了“u”字符串声明
  3. 下面是我的更改代码:

    # -*- coding: utf-8 -*-
    from PyQt4.QtCore import *
    
    def on_ready_stdout():
        byte_array = proc.readAllStandardOutput()
        print 'byte_array: ', byte_array
        print 'unicode: ', unicode(byte_array)
    
    proc = QProcess()
    proc.connect(proc, SIGNAL('readyReadStandardOutput()'), on_ready_stdout)
    proc.start('python -c "print \'hello 中文\'"')
    proc.waitForFinished()
    

    希望这有帮助,尊重