Windows Kommandozeile Encoding

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

Hallo zusammen,

Um hiermit unter Windows einen String zu erhalten, habe ich zwei Möglichkeiten gefunden:

Code: Alles auswählen

from subprocess import run, PIPE

proc = run("dir", shell=True, stdout=PIPE, encoding="cp850")
print(proc.stdout)

Code: Alles auswählen

from subprocess import run, PIPE

run("chcp 65001", shell=True)
proc = run("dir", shell=True, stdout=PIPE, encoding="utf-8")
print(proc.stdout)
Ich finde beides unschön. Wie geht ihr damit um? Gibt es bessere Möglichkeiten?

Ich möchte keine systemweite Änderung in der Registry machen, da ich befürchte, es könnte dann an anderer Stelle wieder Probleme geben.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich bin nicht so viel unter Windows unterwegs, um da persoenliche Erfahrungen zu haben. Aber ich erinnere mich an Gespraeche in der Berliner Python User Group mit dem Guru der Unicode-Behandlung in Python, Martin von Loewis. Ich haette gedacht, dass Python erstmal selbst versucht, das Encoding des Terminals zu bestimmen. Und das sollte auch irgendwo in sys zur Verfuegung stehen. Man findet Informationen dazu hier: https://docs.python.org/3/library/sys.html#sys.stderr Vielleicht hilft das?
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@__deets__,

ja Danke! Der Link hilft schon mal.
Mit locale.getpreferredencoding() bekomme ich (hoffentlich) robust das aktuelle Encoding des Terminals.
Antworten