2010-06-19 52 views
1

我在處理來自QProcess的unicode輸出時遇到了一些麻煩。當我運行下面的例子時,我得到了?而不是中文。任何人都可以告訴我如何獲得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) 
+0

是您的程序文件的文件格式,目前UTF-8? – 2010-09-06 19:46:55

+0

是的。 _____________________ – 2010-09-06 19:57:07

回答

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

我得到了一個錯誤。我編輯了我的問題。 – 2010-09-06 19:30:15

+0

看起來像unicode(byte_array)會拋出這個異常,如果你刪除它或者註釋掉它應該可以正常工作,看起來沒有必要進行這種轉換,因爲byte_array不再是8位字符串。 – 2010-09-06 20:28:23

+0

但輸出不是'中文',這是一堆亂碼。您可以在您的系統上提供一些詳細信息,例如 – 2010-09-06 22:41:25