Python 3'te kodlama bildirimini kullanmalı mıyım?


114

Python 3, kaynak kod dosyaları için varsayılan olarak UTF-8 kodlamasını kullanır. Yine de her kaynak dosyanın başlangıcındaki kodlama bildirimini kullanmalı mıyım? Sevmek# -*- coding: utf-8 -*-

Yanıtlar:


112

Varsayılan Çünkü olduğunu UTF-8, yalnızca varsayılan sapma olduğunda bu beyanı kullanmak gerekir, yoksa diğer araçlar güveniyorsanız (IDE veya metin editörü gibi) bu bilgilerin yararlanmak.

Başka bir deyişle, Python söz konusu olduğunda , yalnızca farklı bir kodlama kullanmak istediğinizde bu bildirimi kullanmanız gerekir.

Editörünüz gibi diğer araçlar benzer sözdizimini destekleyebilir, bu nedenle PEP 263 spesifikasyonu sözdiziminde önemli ölçüde esneklik sağlar (bir yorum codingolmalı , metin orada olmalı, ardından bir :veya =karakteri ve isteğe bağlı beyaz boşluk olmalıdır, ardından tanınan bir codec bileşeni).

Yalnızca Python'un kaynak kodunu nasıl okuduğu için geçerli olduğunu unutmayın . Bu kodun yürütülmesi için geçerli değildir, dolayısıyla yazdırma, dosya açma veya diğer G / Ç işlemlerinin bayt ve Unicode arasında nasıl çevrildiği için geçerli değildir. Python, Unicode ve kodlamalar hakkında daha fazla ayrıntı için, Python Unicode HOWTO'yu veya Ned Batchelder'ın çok kapsamlı Pragmatik Unicode konuşmasını okumanızı şiddetle tavsiye ediyorum .


28
# -*- coding: utf-8 -*-Bazı editörler geçmek için hala yararlı olabilir kaynak dosyasını düzenlerken kodlayan beklenen.
pepr

1
@pepr Bir Byte Order Mark aynısını yapabilir, değil mi?
endolith

12
@endolith: UTF-8 BOM, bu dünyada Microsoft tarafından ortaya atılan bir iğrençliktir .. Bkz. en.wikipedia.org/wiki/Byte_order_mark#UTF-8
Martijn Pieters

1
@MartijnPieters Bağlantınız size katılıyorum görünmüyor
Endolit

2
@endolith: hayır, WP makalesi sadece arka planı özetliyor, bence iğrenç bir şey. Bir BOM'un amacı, bayt sırasını kaydetmektir (dolayısıyla adı, Bayt Sırası İşareti). UTF-8'de bayt sırası karışıklığı yoktur, yalnızca UTF-16 ve UTF-32'de bu işleve sahiptir. Değer zaten yeniden tasarlanmış sıfır genişlikli bir bölünmesiz boşluk karakteridir (kazara yazdırma daha sonra tamamen görünmez çıktıyla sonuçlandığı için kullanışlıdır), bunun sihirli bir sabit olarak yeniden kullanılması benim görüşüme göre yanlıştır.
Martijn Pieters

6

Hayır, eğer:

  • tüm proje yalnızca UTF-8varsayılan olanı kullanır .
  • ve IDE aracınızın her dosyada bu kodlama bildirimine ihtiyaç duymadığından eminsiniz.

Evet eğer

  • projeniz farklı kodlamaya dayanıyor
  • veya birçok kodlamaya dayanır.

Çoklu kodlama projeleri için:

Eğer bazı dosyalar içinde kodlanmışsa non-utf-8, o zaman içinde kodlananlar için bile UTF-8kodlama bildirimi eklemelisiniz çünkü altın kuralExplicit is better than implicit.

Referans:

  • PyCharm'ın bu beyana ihtiyacı yok:

pycharm'daki belirli bir dosya için kodlamayı yapılandırma

  • vim'in bu bildirime ihtiyacı yoktur, ancak:
# vim: set fileencoding=<encoding name> :
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.