Słowo wstępne



Pająki tkają pajęczyny, ptaki zakładają gniazda, bobry budują żeremia a informatycy piszą blogi informatyczne. Takie jest prawo natury, więc i ja nie mogłem się mu długo opierać.

http://commons.wikimedia.org/wiki/File:Castor_canadensis1.jpg

"Salve munde!" ma za cel służyć Ludzkości i nieść sztandar Postępu ku powszechnej szczęśliwości to taka szuflada, do której będę wrzucał wszystkie pomysły, które wydały mi się ciekawe, ale nie chciało mi się ich do końca zrealizować. Prawda jest taka, że wejście w rolę producenta treści w Internecie jest znacznie ciekawsze niż bycie wyłącznie konsumentem. Treść, którą się produkuje niekoniecznie musi zachwycać geniuszem i oryginalnością, ale już sam fakt wystawienia pomysłów pod ogień krytyki wzbogaca Internet. Mam tu na myśli nie tylko konkretne rozwiązania, np. programistyczne, ale też sposób radzenia sobie ze zwykłymi, codziennymi błędami. Oto przykład z Pythona:

1 ~]$ python
2 Python 2.7.8 (default, Nov 10 2014, 08:19:18)
3 [GCC 4.9.2 20141101 (Red Hat 4.9.2-1)] on linux2
4 Type "help", "copyright", "credits" or "license" for more information.
5 >>> ord("ż")
6 Traceback (most recent call last):
7 File "<stdin>", line 1, in <module>
8 TypeError: ord() expected a character, but string of length 2 found
9 </module></stdin>

Skąd ten błąd? Spróbujmy zatem w Pythonie 3:

1 ]$ python3
2 Python 3.4.1 (default, Nov 3 2014, 14:38:10)
3 [GCC 4.9.1 20140930 (Red Hat 4.9.1-11)] on linux
4 Type "help", "copyright", "credits" or "license" for more information.
5 >>> ord("ż")
6 380

W Pythonie 3 działa.

Nie jest to jakaś tajemica, że Python 2 pracuje domyślnie w kodowaniu ASCII i nie radzi sobie ze znakami wykraczającymi poza standardowe 128 znaków. Kiedy funkcja ord() dostaje znak "ż", otrzymuje coś więcej niż jeden bajt (a w ASCII każdy znak ma długość jednego bajta) i dlatego wyrzuca powyższy błąd. Python 3 jako domyślne kodowanie przyjmuje UTF-8, dlatego tam problem nie występuje. Co w takim wypadku robić jeśli musimy korzystać z dwójki?


1 >>> ord(u"ż")
2 380

za pomocą znacznika "u" uprzedzamy interpreter, że ma się spodziewać znaku zakodowanego w UTF-8. Problem solved.

Jak to się jednak ma do pisania bloga? Przez wyprodukowanie takiego wpisu, nawet niezbyt oryginalnego, spowodowałem, że ktoś, kto natrafi na ten sam błąd i go "wygugla", być może trafi na mój wpis i oszczędzi sobie trudu. Z doświadczenia wiem, że taka metoda nauki się sprawdza i daje rezultaty. Innymi słowy, nikomu w ten sposób nie zaszkodzę, a jest pewna szansa, że ktoś na tym coś zyska.