Przejdź do zawartości

Zanurkuj w Pythonie/Łańcuchy znaków i unikod

Z Wikibooks, biblioteki wolnych podręczników.

Za moment powrócimy do naszego pierwszego programu, jednak najpierw musimy zrozumieć, czym są słowniki, krotki i listy. Jeśli choć trochę umiesz programować w Perlu, to pewnie masz już pewną wiedzę na temat słowników, czy list, ale pewnie nie wiesz, czym są krotki. Najpierw zajmiemy się jednym z najczęściej używanych typów danych, czyli łańcuchami znaków.

Łańcuchy znaków i unikod

[edytuj]

Łańcuchy znaków służą do przechowywania napisu lub pewnych danych bajtowych. W Pythonie, podobnie jak w większości innych języków programowania tworzymy łańcuchy znaków[1] (ang. string) poprzez umieszczenie danego tekstu w cudzysłowach.

Przykład. Definiowanie łańcucha znaków
>>> text = "Nie za długi tekst"                                                         #(1)
>>> text
'Nie za d\xc5\x82ugi tekst'                                                             #(2)
>> print (text)
Nie za długi tekst                                                                      #(3)
>>> text2 = 'Kolejny napis, ale bez polskich liter'                                     #(4)
>>> text2
'Kolejny napis, ale bez polskich liter'
>>> text3 = 'Długi tekst,\nktóry po przecinku znajdzie się w następnej linii'           #(5)
>>> print (text3)
Długi tekst,
który po przecinku znajdzie się w następnej linii
>>> text4 = r'Tutaj znaki specjalne np.\n \t, czy też \x26 nie zostaną zinterpretowane' #(6)
>>> print (text4)
Tutaj znaki specjalne np.\n \t, czy też \x26 nie zostaną zinterpretowane
  1. W ten sposób stworzyliśmy łańcuch znaków "Nie za długi tekst", który z kolei przypisaliśmy do zmiennej text. Zauważmy, że wewnątrz łańcucha mogą się znajdować polskie litery.
  2. Otrzymany w tym miejscu wynik na wyjściu może się nieco różnić na różnych systemach. Jest to zależne od kodowania znaków w systemie operacyjnym, z którego korzystamy. Komputer uruchomiony przez autorów korzystał z kodowania UTF-8. Zauważmy, że litera ł w systemie UTF-8 to dwa bajty "\xc5\x82".
  3. Wszystko zostało ładnie wypisane. Tam gdzie jest ł widzimy ł, a nie jakieś "krzaki".
  4. Łańcuch znaków nie musi być deklarowany w cudzysłowie, może być też ujęty w apostrofach.
  5. Znaki specjalne wstawiamy dodając odwrotny ukośnik (tzw. backslash) np. \n.
  6. Możemy także stworzyć łańcuch znaków w tzw. sposób surowy. Aby to uczynić, poprzedzamy łańcuch znaków literą r. Wewnątrz surowego łańcucha znaków znaki specjalne, zawierajace odwrotny ukośnik nie są specjalnie interpretowane. Można powiedzieć, że znaki specjalne w takim łańcuchu nie są znakami specjalnymi. To co napiszemy, to będziemy mieli.

Unikod

[edytuj]

Ponieważ mówimy w języku polskim, piszemy w tym języku, a ponadto czytamy w tym języku, zapewne chcielibyśmy tworzyć programy, które dobrze sobie dają radę ze znakami tego języka. Doskonałym do tego rozwiązaniem jest unikod (ang. unicode). Unikod przechowuje nie tylko polskie znaki, ale jest systemem reprezentowania znaków ze wszystkich języków świata

Przykład. Definiowanie unikodowego łańcucha znaków
>>> text = u"Nie za długi tekst"    #(1)
>>> text
u'Nie za d\u0142ugi tekst'          #(2)
>>> print (text)
Nie za długi tekst
  1. Aby utworzyć unikodowy napis, dodajemy przedrostek u i tyle.
  2. Otrzymasz taki sam wynik. Dane przechowywane w unikodzie nie zależą od systemu kodowania z którego korzysta Twój komputer.

Pamiętamy, jak w poprzednim rozdziale powiedzieliśmy, że do notek dokumentacyjnych został dodany przedrostek u, aby Python potrafił poprawnie zinterpretować polskie znaki. Wtedy właśnie wykorzystaliśmy unikod.

Przykład. Unikod w buildConnectionString
def buildConnectionString(params):
    u"""Tworzy łańcuch znaków na podstawie słownika parametrów.
    
    Zwraca łańcuch znaków.
    """

Przypisy

  1. W tym podręczniku łańcuchy znaków będziemy czasami nazywali napisami.