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: cp437
Eklenen 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 81
doğ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 BC
tutmaya 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: utf8
yeterince iyi, gerek yok-*-