Sto usando Python 3 (recentemente passato da Python 2). Il mio codice di solito gira su Linux ma anche a volte (non spesso) su Windows. Secondo la documentazione di Python 3 per open()
, la codifica predefinita per un file di testo è da locale.getpreferredencoding()
se non viene fornito l'argomento encoding
arg. Voglio che questo valore predefinito sia utf-8
per un mio progetto, indipendentemente dal sistema operativo su cui è in esecuzione (al momento, è sempre UTF-8 per Linux, ma non per Windows). Il progetto ha molte chiamate a open()
e non voglio aggiungere a tutti encoding='utf-8'
. Quindi, voglio cambiare la codifica preferita della locale in Windows, come lo vede Python 3.Modifica della "lingua preferita codifica" in Python 3 in Windows
Ho trovato una domanda precedente "Changing the "locale preferred encoding"", che ha una risposta accettata, quindi ho pensato che ero a posto. Ma sfortunatamente, nessuno dei comandi suggeriti in quella risposta e il suo primo commento funzionano per me in Windows. In particolare, quella risposta accettata e il suo primo commento suggeriscono di eseguire chcp 65001
e set PYTHONIOENCODING=UTF-8
, e ho provato entrambi. Si prega di consultare la trascrizione di sotto dalla mia finestra 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()
Nota che, anche dopo che entrambi hanno suggerito i comandi, la codifica del mio file aperto è ancora cp1252
al posto del previsto utf-8
.
Forse è solo il mio stile, ma preferirei scrivere una funzione wrapper open() in cui si specifica la codifica. –
Non utilizzare 'chcp 65001'. La console di Windows non supporta correttamente UTF-8, e non sta facendo quello che vuoi comunque. 'locale.getpreferredencoding' non ha nulla a che fare con la codepage della console; è basato sulla codifica ANSI delle impostazioni locali di Windows. Ad esempio, se si chiama Win32 'CreateFileA' (ANSI) anziché' CreateFileW' (UTF-16), la stringa del percorso file viene decodificata come stringa ANSI (ad esempio Windows-1252). Windows non consente di utilizzare UTF-8 come set di caratteri ANSI e anche il runtime C non consente l'utilizzo di UTF-8 per le impostazioni internazionali. – eryksun
@eryksun Grazie per le informazioni, ma ha troppo gergo specifico per Windows per me. Uso raramente Windows. Tutto ciò che voglio è un modo per dire a Windows 8 o a Python 3: "Caro Windows 8/Python 3, tieni presente che tutti i file di testo su questo computer devono essere codificati in UTF-8, senza eccezioni. in futuro quando apri file di testo. Grazie. " – walrus