Python 3 kullanıyorum (kısa bir süre önce Python 2'den geçiş yapılıyor). Kodum genellikle Linux üzerinde çalışır, ancak bazen (bazen) Windows'da çalışır. open()
için Python 3 belgelerine göre, bir metin dosyası için varsayılan kodlama, encoding
arg numarası verilmediyse locale.getpreferredencoding()
'dan sağlanır. İşletim sistemi üzerinde çalışan bir sistem için bu varsayılan değerin utf-8
olmasını istiyorum (şu anda Linux için her zaman UTF-8, Windows için değil). Projenin open()
numarasına çok fazla çağrı var ve hepsine encoding='utf-8'
eklemek istemiyorum. Böylece, Python 3'ün göreceği gibi, yerelde tercih edilen kodlamayı Windows'da değiştirmek istiyorum.Windows'da Python 3'te “yerel tercih edilen kodlama” yı değiştirmek
Daha önce bir soru sordu "Changing the "locale preferred encoding"", kabul edilmiş bir cevabı var, bu yüzden gitmek için iyi olduğunu düşündüm. Ancak maalesef, bu cevabın önerdiği komutların hiçbiri ve ilk yorumu Windows'da benim için işe yaramıyor. Özel olarak, bu kabul edilen yanıt ve ilk yorumu, chcp 65001
ve set PYTHONIOENCODING=UTF-8
'u çalıştırmayı önerdi ve ikisini de denedim. Benim cmd penceresinden aşağıya transkript bakın: Her iki komutları önerdi sonra bile, benim açılan dosyanın kodlama hala yerine amaçlanan utf-8
arasında cp1252
olan
> 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()
Not.
Belki de sadece benim tarzımdır, ancak kodlamayı belirttiğiniz bir wrapper open() işlevini yazmayı tercih ederim. –
'chcp 65001' kullanmayın. Windows konsolu UTF-8'i düzgün şekilde desteklemiyor ve istediğinizi yapmayacaksınız. 'locale.getpreferredencoding' konsol kodu sayfası ile ilgisi yoktur; Windows yerel ayarlarının ANSI kodlamasına dayanır. Örneğin, 'CreateFileW' (UTF-16) yerine Win32' CreateFileA' (ANSI) çağırırsanız, dosya yolu dizesi bir ANSI dizesi (örneğin, Windows-1252) olarak çözülür. Windows, UTF-8'in ANSI karakter kümesi olarak kullanılmasına izin vermez ve C çalışma zamanı, bir yerel ayar için UTF-8 kullanılmasına da izin vermez. – eryksun
@eryksun Bilgi için teşekkürler, ancak benim için çok fazla Windows'a özgü jargon var. Nadiren Windows kullanıyorum. Tek istediğim, Windows 8 ya da Python 3'e söylemek için bir yol: "Sevgili Windows 8/Python 3, Lütfen bu bilgisayardaki tüm metin dosyalarının istisnasız olarak UTF-8 olarak kodlanması gerektiğini unutmayın. Lütfen bu gerçeği hatırlayın. Gelecekte metin dosyalarını açarken. Teşekkürler. " – walrus