—Uwaga mogą być tutaj małe przekłamania w tym co piszę, ale idea będzie słuszna.—
To skomplikowane… Otóż litera “ę” (i inne polskie znaki) nie znajdują się w tabeli kodów ASCII. Wiele języków programowania (w tym C++), szczególnie mających początki “dawno temu” nie obsługuje standarowo kodów spoza tabei ASCII (trzeba odpowiedniego typu lub biblioteki, w zależności od języka). Python jednak domyślnie pracuje w UTF-8 i pozwala na wprowadzenie wszystkiego. Jeśli jako linię podasz coś takiego:
ϨϨϨϨϨϨ
to bez problemu wyświetli Ci, że to sześć znaków o kodzie 1000. Niemniej w kodach ASCII nie ma kodów większych niż 128 lub 255 (w zależności od tego ilo bitowy jest znak). C++ nie wyświetli “od tak”, że to 1000. Wyświetli, że jest to:
168 6
207 6
Taki też ten znak (Ϩ = 168 207) ma numer jeśli do dyspozycji mamy tylko kody ASCII. Czyli problem jest taki, że Python obsługuje domyśłnie cały Unicode (i bardzo dobrze, ale nie pomaga to w tym zadaniu).
Teraz pytanie jak to obejść? Pewnie istnieje jakiś “jeden prosty trick, programiści go nienawidzą!”. Ja go nie znam. Znam trick “na około”, a mianowicie jak zapiszesz nieszczęsny znak “Ϩ” w pliku o nazwie “some_file.txt” i zrobisz tak:
with open('some_file.txt', 'r') as file:
my_str = file.read()
lista = [ord(x) for x in my_str]
print(lista)
to wyświetli Ci się [207, 168]
. Teraz jak dobrze przeszukasz internet to znajdziesz jak udać, że napis (np, pobierany od użytkownika) jest plikiem (dokładnie: opakować w plik bez tworzenia go), a później odczytasz też plik tak jak powyżej. Nie jest to łatwe.