печать юникода через QProcess - PullRequest
1 голос
/ 19 июня 2010

У меня возникли проблемы с обработкой вывода Unicode из QProcess.Когда я запускаю следующий пример, я получаю ??вместо 中文Может кто-нибудь сказать мне, как получить вывод 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 голосов
/ 06 сентября 2010

Я немного изменил ваш код и получил ожидаемый результат:

byte_array:  hello 中文

unicode:  hello 中文

мои изменения были:

  1. Я добавил # - - кодировка: utf-8 - - магический комментарий (подробности здесь )
  2. Удалено объявление строки "u" из вызова proc.start

ниже ваш код с моими изменениями:

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

надеюсь, это поможет, с уважением

...