Diğerlerinin söylediği gibi, # coding:kaynak dosyanın kaydedildiği kodlamayı belirtir. Bunu açıklamak için bazı örnekler aşağıda verilmiştir:
Diske cp437 (konsol kodlamam) olarak kaydedilmiş bir dosya, ancak kodlama bildirilmedi
b = 'über'
u = u'über'
print b,repr(b)
print u,repr(u)
Çıktı:
File "C:\ex.py", line 1
SyntaxError: Non-ASCII character '\x81' in file C:\ex.py on line 1, but no
encoding declared; see http://www.python.org/peps/pep-0263.html for details
# coding: cp437Eklenen dosyanın çıktısı :
über '\x81ber'
über u'\xfcber'
İlk başta Python, kodlamayı bilmiyordu ve ASCII olmayan karakterden şikayet etti. Kodlamayı öğrendikten sonra, bayt dizesi aslında diskte bulunan baytları aldı. Unicode dizesi için, Python \ x81 okudu, cp437'de bunun bir ü olduğunu biliyordu ve ü için U + 00FC olan Unicode kod noktasına kodunu çözdü. Bayt dizesi yazdırıldığında, Python onaltılık değeri 81doğrudan konsola gönderdi . Unicode dize baskılı zaman, Python doğru cp437 olarak benim konsol kodlamayı tespit ve Unicode tercüme ü için cp437 değerine ü .
UTF-8'de bildirilen ve kaydedilen bir dosyada şunlar olur:
├╝ber '\xc3\xbcber'
über u'\xfcber'
UTF-8'de ü , onaltılık bayt olarak kodlanır C3 BC, bu nedenle bayt dizesi bu baytları içerir, ancak Unicode dizesi ilk örnekle aynıdır. Python iki baytı okudu ve doğru şekilde çözdü. Python, bayt dizesini yanlış yazdırdı, çünkü ü temsil eden iki UTF-8 baytı doğrudan cp437 konsoluma gönderdi.
Burada dosya cp437 olarak bildirilir, ancak UTF-8 olarak kaydedilir:
├╝ber '\xc3\xbcber'
├╝ber u'\u251c\u255dber'
Bayt dizesi, baytları diskte C3 BCtutmaya devam ediyor (UTF-8 onaltılık bayt ), ancak bunları tek bir UTF-8 ile kodlanmış karakter yerine iki cp437 karakteri olarak yorumladı. Unicode kod noktalarına çevrilen bu iki karakter ve her şey yanlış yazdırılır.
# coding: utf8yeterince iyi, gerek yok-*-