Definiowanie kodowania w plikach źródłowych Pythona

Posted: December 31, 2011 1:41 PM

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:

Python code
  1. # Some comment
  2. # -*- 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:

Python code
  1. 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.

Grzegorz Śliwiński

Be the first to post

Add new comment

Your email will never be published

Must start with http:// or https://
Delete the reply