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
Tut mir leid mein Fehler, ich bearbeite es gerade –
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
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