Seite 1 von 1

Windows Kommandozeile Encoding

Verfasst: Freitag 20. August 2021, 08:19
von rogerb
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.

Re: Windows Kommandozeile Encoding

Verfasst: Freitag 20. August 2021, 08:43
von __deets__
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?

Re: Windows Kommandozeile Encoding

Verfasst: Freitag 20. August 2021, 15:22
von rogerb
@__deets__,

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