通过QProcess打印Unicode

2 投票
1 回答
1259 浏览
提问于 2025-04-16 00:10

我在处理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

我对你的代码做了一些小改动,得到了预期的结果:

byte_array:  hello 中文

unicode:  hello 中文

我的改动包括:

  1. 我添加了一个# -- coding: utf-8 -- 的魔法注释(详细信息可以在这里找到)
  2. 从proc.start调用中去掉了“u”字符串声明

下面是你代码的修改版:

# -*- 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()

希望这对你有帮助,祝好

撰写回答