Definiowanie kodowania w plikach źródłowych Pythona
Dlaczego definiowanie kodowania w pliku źródłowym Pythona jest istotne?
Odpowiedź na to pytanie jest dość prosta. O ile zazwyczaj rozwiązania powstające na zachodzie są świetne, o tyle nikt tam nie myśli zazwyczaj dalej niż granica krajów, którym wystarcza zazwyczaj kodowanie określane mianem latin1. Stąd też tyle standardów kodowania ile mamy. W Pythonie (przynajmniej 2.x) również czysty plik jest kodowany w 7 bitowym ASCII i tak też interpretowany.
Chyba, że dodamy w pierwszej, lub drugiej linii pliku deklarację kodowania np. utf8:
# Some comment # -*- coding: utf-8 -*
Deklaracja taka musi znaleźć się w każdym pliku projektu.
Bez tej deklaracji zwykłe stringi, jakie mieścimy w kodzie źródłowym zostaną wyświetlone poprawnie, jednak jeśli już zaczniemy pisać ą i ę w stringach Unicode:
unicode_string = u'ciąg znaków z ą i ę'
Może spowodować błąd, choć nowsze wersje wyświetlą tylko ostrzeżenie. Python 3 zdaje się już nie sprawia takich problemów z kodowaniem, rozwiązując problem na korzyść utf8, jednak trochę wody jeszcze upłynie w odrze, nim się wszyscy przeniosą...
Zmiany te zostały zaproponowane w PEP 263 a wprowadzone w Pythonie 2.3.