2010-06-19 2 views
1

У меня возникли проблемы с обработкой вывода unicode из QProcess. Когда я запускаю следующий пример, я получаю? вместо 中文. Может ли кто-нибудь сказать мне, как получить выход из Юникода?Печать unicode через QProcess

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) 
+0

Теперь Является ли формат файла файл программы UTF-8? – 2010-09-06 19:46:55

+0

Да. _____________________ –

ответ

0

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

byte_array: hello 中文 

unicode: hello 中文 

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

  1. Я добавил # - - кодирование: UTF-8 - - магический комментарий (подробности here)
  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() 

надеюсь, что это помогает, считает

+0

У меня есть ошибка. Я редактировал свой вопрос. –

+0

выглядит как unicode (byte_array), выдает это исключение, если вы удалили его или прокомментировали, он должен работать нормально, похоже, что нет необходимости в этом преобразовании, так как byte_array больше не является 8-битной строкой. –

+0

Но выход не «中文», это куча тарабарщины. –