2010-06-19 9 views
1

Je rencontre des problèmes lors de la gestion de la sortie Unicode à partir d'un processus Q. Quand je cours l'exemple suivant, je reçois ?? au lieu de 中文. Quelqu'un peut-il me dire comment obtenir la sortie Unicode?Impression d'unicode via un processus Q

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 J'ai essayé de l'exécution de votre code modifié, mais je reçois une erreur:

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

est le format de fichier de votre fichier de programme maintenant UTF-8? –

+0

Oui. _____________________ –

Répondre

0

Je suis un peu changé votre code et a obtenu le résultat attendu:

byte_array: hello 中文 

unicode: hello 中文 

mes changements sont les suivants:

  1. I ajouté # - - codage: utf-8- - commentaire magique (détails here)
  2. Suppression de "u" de la déclaration de chaîne de l'appel proc.start

ci-dessous est votre code avec mes changements :

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

espérons que cette aide, ce qui est

+0

J'ai eu une erreur. J'ai édité ma question. –

+0

ressemble à unicode (byte_array) jette cette exception, si vous voulez le supprimer ou le commenter il devrait fonctionner correctement, il semble qu'il n'y ait pas besoin de cette conversion car byte_array n'est plus une chaîne de 8 bits. –

+0

Mais la sortie n'est pas '中文', c'est un tas de charabia. –