W 99% przypadków nie należy tego ruszać (zresztą celowo jest to
utrudnione -- poprzez usuwanie tej funkcji z modułu sys zaraz po
pierwszym jej użyciu w module site...).
Funkcja ta ustawia tzw. domyślne kodowanie Pythona -- dla sytuacji,
w których programista nie określił, jakie kodowanie ma być użyte do
zakodowania/rozkodowania... Np. jeżeli użyjemy encode()/decode()
bez podawania kodowania, lub jeżeli (jest wiele takich sytuacji)
Python dostał unicode, a spodziewał się str, lub jeżeli dostał str, a
spodziewał się unicode -- sam niejawnie rozkodowuje/zakodowuje dane
by uzyskać właściwy typ; używa wtedy owego domyślnego kodowania.
Domyślne kodowanie jest standardowo ustawione na ascii (obejmje
tylko najbardziej standardowe 128 znaków: alfabet łaciński,
podstawowe znaki matematyczne i przestankowe, podstawowe kody
kontrolne, np. znak końca wiersza...), co oznacza, że np. kod:
u"żółć".encode()
...spowoduje wystąpienie wyjątku UnicodeEncodeError.
Na koniec kilka morałów:
w odniesieniu do tekstu -- wszędzie gdzie się da, należy używać
obiektów unicode a nie str, a jedynie na wejściu/wyjściu
odkodowywać/zakodowywać z/do postaci ciągu bajtów (str),
na dłuższą metę lepiej podawać kodowanie jawnie ("explicit is
better than implicit" -- Zen of Python) i raczej unikać sytuacji,
w których Python będzie dokonywać automatycznego-niejawnego
kodowania/dekodowania (bo gdy wyskoczy błąd związany z kodowaniem,
często trudno potem dojść, gdzie tak naprawdę nastąpiło
zniekształcenie danych...).
Pozdrawiam,
Jan Kaliszewski (zuo)
PS. UWAGA: cała moja odpowiedź dotyczy Pythona 2.x. W Pythonie 3.x
rzeczy wyglądają trochę inaczej: dawny typ unicode nazywa się str,
a dawnego str nie ma. Jest za to typ bytes (i pokrewny mu bytearray...),
do pewnego stopnia podobny do dawnego str, ale nieprzeznaczony do
operowania danymi tekstowymi, a jedynie binarnymi (ale to inna historia).
W Pythonie 3.x nie ma też niejawnego automatycznego kodowania/dekodowania
-- doświadczenia Pythona 2.x pokazują, że sprawiało ono wiele kłopotów.
W Pythonie 3.x programista, jeżeli poda dane złego typu otrzyma jasny
komunikat błędu, a nie nieprawidłowe wyniki zmuszające do bawienia się
w Sherlocka Holmesa ("w którym momencie Python dokonał tego niejawnego
kodowania/dekodowania?").
--
Jan Kaliszewski (zuo)