2017-06-30 3 views
1

Ich arbeite an einem Skript, das nach dem Zufallsprinzip eine Datei wählt und fragt den Benutzer, ob es ausgeführt werden soll. Ich habe kürzlich den Fehler unten angezeigt und ich bin verwirrt darüber, wie ich mein Skript ändern kann, um das Problem zu beheben.Umgang mit cp932 Kodierungsfehler beim Drucken des Dateinamens nach Dateiliste

Traceback (most recent call last): 
File ".\randomplay.py", line 33, in <module> 
    print(file) 
UnicodeEncodeError: 'cp932' codec can't encode character '\u8138' in position 1: illegal multibyte sequence 

Der folgende Code funktioniert in Python 2.x. Allerdings muss ich diese Funktion in Python 3.x implementieren. Kann mir jemand raten, wie es geht? Ich möchte, dass es so wie vorher funktioniert.

import sys 
import os,io 
import random 
import subprocess 
import msvcrt 

if __name__ == '__main__': 
    indir = os.path.realpath("./") 
    for root, dirs, files in os.walk(indir): 
     random.shuffle(files) 
     #print(files) 
     for file in files: 
      cmd="\""+file+"\"" 
      print(file) 
      print("OK with it?") 
      c = msvcrt.getch() 
      print(str(ord(c))) 
      if ord(c) == 27: 
       exit() 
      elif ord(c) == 13: 
       print("executing...") 
       subprocess.Popen(cmd,shell=True) 
       exit() 
      else: 
       print("How about this?") 
       pass 
+0

Tut mir leid mein Fehler, ich bearbeite es gerade –

+0

Sind Sie sicher, dass es tatsächlich in Python 2 funktioniert, oder gibt 'os.walk' den Dateinamen zurück, wobei das Zeichen durch ein"? " oder "·" Zeichen? Python 2 verwendet standardmäßig die Legacy-ANSI-Dateisystemfunktionen. Die ANSI-API verwendet eine verlustbehaftete Codierung für nicht unterstützte Zeichen. Um die ursprünglichen Unicode-Dateinamen in Python 2 aufzulisten, müssen Sie einen 'Unicode'-Pfad verwenden, z. 'os.walk (u". ")'. – eryksun

+1

Die einfache Lösung zum Drucken des ursprünglichen Unicode-Zeichens besteht im Aktualisieren auf Python 3.6, das standardmäßig die UTF-16-API der Konsole verwendet. Oder für ältere Versionen, einschließlich Python 2, installieren und aktivieren Sie das 'win_unicode_console'-Modul. – eryksun

Antwort

0

von @eryksun

von Python 3.6.x Upgrade scheint die schnelle Art und Weise zu sein, jedes Skript mit diesem Problem ohne Änderung zu beschäftigen! Jetzt funktioniert es!

Danke!

Verwandte Themen