Ich benutze Python 3 (kürzlich von Python 2 gewechselt). Mein Code läuft normalerweise unter Linux, aber auch manchmal (nicht oft) unter Windows. Laut Python 3-Dokumentation für open()
lautet die Standardcodierung für eine Textdatei locale.getpreferredencoding()
, wenn der encoding
arg nicht angegeben ist. Ich möchte, dass dieser Standardwert utf-8
für ein Projekt von mir ist, egal auf welchem Betriebssystem es läuft (derzeit ist es immer UTF-8 für Linux, aber nicht für Windows). Das Projekt hat viele Aufrufe an open()
und ich möchte nicht alle encoding='utf-8'
hinzufügen. Daher möchte ich die bevorzugte Codierung des Gebietsschemas in Windows ändern, wie Python 3 es sieht.Ändern der "Locale bevorzugte Codierung" in Python 3 in Windows
Ich fand eine vorherige Frage "Changing the "locale preferred encoding"", die eine angenommene Antwort hat, also dachte ich, dass ich gut war zu gehen. Aber leider funktioniert keiner der vorgeschlagenen Befehle in dieser Antwort und der erste Kommentar für mich in Windows. Insbesondere diese angenommene Antwort und ihr erster Kommentar schlagen vor, chcp 65001
und set PYTHONIOENCODING=UTF-8
zu laufen, und ich habe beides versucht. Bitte beachten Sie Transkript unten aus meinem Fenster cmd:
> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> f.encoding
'cp1252'
>>> exit()
> chcp 65001
Active code page: 65001
> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> f.encoding
'cp1252'
>>> exit()
> set PYTHONIOENCODING=UTF-8
> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> f.encoding
'cp1252'
>>> exit()
Beachten Sie, dass auch nach beiden Befehle vorgeschlagen, meine geöffnete Datei die Codierung noch ist cp1252
statt der beabsichtigten utf-8
.
Vielleicht ist es nur mein Stil, aber ich würde lieber eine Wrapper open() -Funktion schreiben, in der Sie die Codierung angeben. –
Verwenden Sie nicht 'chcp 65001'. Die Windows-Konsole unterstützt UTF-8 nicht richtig und tut sowieso nicht, was Sie wollen. 'locale.getpreferredencoding' hat nichts mit der Konsolen-Codepage zu tun; Es basiert auf der ANSI-Codierung der Windows-Ländereinstellung. Wenn Sie beispielsweise Win32 'CreateFileA' (ANSI) anstelle von' CreateFileW' (UTF-16) aufrufen, wird die Dateipfadzeichenfolge als ANSI-Zeichenfolge (z. B. Windows-1252) dekodiert. Windows lässt nicht zu, dass UTF-8 als ANSI-Zeichensatz verwendet wird, und die C-Laufzeit erlaubt auch nicht die Verwendung von UTF-8 für ein Gebietsschema. – eryksun
@eryksun Danke für die Info, aber es hat zu viel Windows-spezifischen Jargon für mich. Ich benutze selten Windows. Alles, was ich will, ist eine Möglichkeit, zu Windows 8 oder Python 3 zu sagen: "Sehr geehrte Windows 8/Python 3, Bitte beachten Sie, dass alle Textdateien auf diesem Computer ohne Ausnahme in UTF-8 codiert werden sollten. Bitte beachten Sie diese Tatsache in der Zukunft beim Öffnen von Textdateien. Danke. " – walrus