If you're seeing this message, it means we're having trouble loading external resources on our website.

Jeżeli jesteś za filtrem sieci web, prosimy, upewnij się, że domeny *.kastatic.org i *.kasandbox.org są odblokowane.

Główna zawartość

Przechowywanie tekstu w formacie binarnym

Komputery przechowują więcej niż tylko liczby w formacie binarnym. Ale w jaki sposób liczby binarne mogą reprezentować coś innego niż liczby np. litery i symbole?
Jak się okazuje, wystarczy odrobina ludzkiej współpracy. Musimy uzgodnić kodowanie, czyli mapowanie, odwzorowanie znaku na liczbę binarną.

Proste kodowanie

Na przykład, co by było, gdybyśmy chcieli przechowywać następujące symbole w postaci binarnej?
☮️❤️😀
Możemy stworzyć takie proste kodowanie:
Postać binarna | Symbol\n- | - | -\n01\t| ☮️\n10\t| ❤️\n11\t| 😀
Nazwijmy to kodowaniem HPE. Pomaga ono w nadawaniu kodom nazw, tak aby programiści wiedzieli, że używają tego samego kodowania.
Jeśli program komputerowy musi zapisać symbol ❤️ w pamięci komputera, może zamiast tego zapisać 10. Gdy program musi wyświetlić użytkownikowi 10, musi tylko pamiętać o kodowaniu HPE i zamiast tego wyświetlić ❤️.
Programy i pliki komputerowe często muszą przechowywać wiele znaków, co jest możliwe dzięki połączeniu ze sobą kodowania każdego znaku.
Program mógłby zapisać plik o nazwie "msg.hpe" z tymi danymi:
010111111010
Program na innym komputerze, który rozumie kodowanie HPE, może następnie otworzyć "msg.hpe" i wyświetlić sekwencję symboli.
Sprawdź swoją wiedzę
Jaką sekwencję wyświetliłby program?
Wybierz 1 odpowiedź:

Kodowanie HPE wykorzystuje tylko 2 bity, co ogranicza liczbę symboli, które może reprezentować.
Sprawdź swoją wiedzę
Ile symboli może reprezentować kodowanie 2-bitowe?
  • Prawidłowa odpowiedź to:
  • liczba całkowita, taka jak 6
  • właściwy uproszczony ułamek, taki jak 3/5
  • niewłaściwy uproszczony ułamek, taki jak 7/4
  • liczba mieszana, taka jak 1 3/4
  • dokładny ułamek dziesiętny, taki jak 0,75
  • wielokrotność pi, taka jak 12 pi lub 2/3 pi

Jednak przy większej ilości bitów informacji, kodowanie może stanowić wystarczającą liczbę liter dla komputerów do przechowywania wiadomości, dokumentów i stron internetowych.

Kodowanie ASCII

ASCII było jednym z pierwszych ustandaryzowanych kodowań. Został on opracowany w latach 60-tych XX wieku, kiedy telegrafia była podstawową formą komunikacji na duże odległości, ale do dziś jest stosowany w nowoczesnych systemach komputerowych. 1
Teletypiści pisaliby wiadomości na takich dalekopisach jak ten:
Zdjęcie maszyny dalekopisowej, składającej się z klawiatury mechanicznej, kartki papieru wychodzącej z wypisanymi literami oraz mechanizmu do odczytu pasków papieru wejściowego.
Dalekopis model ASR 33. Źródło obrazu: Marcin Wichary
Dalekopis używał wtedy standardu ASCII do kodowania każdego wpisanego znaku do postaci binarnej, a następnie do przechowywania lub przesyłania danych binarnych.
Ta strona z podręcznika dalekopisu z 1972 r. przedstawia 128 kodów ASCII:
Zeskanowany wykres kodowania ASCII.
Tabela ASCII z drukarki TermiNet 300. Źródło obrazu: Wikipedia
Każdy znak ASCII jest kodowany w układzie binarnym za pomocą 7 bitów. Na powyższym rysunku nagłówek kolumny wskazuje pierwsze 3 bity, a nagłówek wiersza ostatnie 4 bity. Pierwszy znak to "NUL", zakodowany jako 0000000.
Pierwsze 32 kody reprezentują "znaki sterujące", znaki, które oprócz wydruku litery wywołują inny efekt. "BEL" (kodowany w języku binarnym jako 0000111) powodował sygnał dzwonka lub sygnał brzęczyka. "ENQ" (kodowany jako 0000101) reprezentował zapytanie, prośbę o identyfikację przez stację odbiorczą.
Znaki kontrolne zostały pierwotnie zaprojektowane dla dalekopisów i telegrafii, ale wiele z nich zostało ponownie zaprojektowanych dla nowoczesnych komputerów i Internetu - zwłaszcza "CR" i "LF". "CR" (0001101) stanowił "powrót karetki" na dalekopisie, przesuwając głowicę drukującą na początek linii. "LF" (0001010) oznaczał "koniec linii", przesuwający głowicę drukującą w dół o jedną linię. Nowoczesne protokoły internetowe, takie jak HTTP, FTP i SMTP, używają kombinacji "CR" + "LF" do reprezentowania końca linii.
Pozostałe 96 znaków ASCII wyglądają o wiele bardziej znajomo.
Oto pierwsze 8 wielkich liter:
Postać binarna | Litera\n- | - | -\n1000001 | A\n1000010 | B\n1000011 | C\n1000100 | D\n1000101 | E\n1000110 | F\n1000111 | G\n1001000 | H
Zgodnie ze standardem ASCII, możemy zakodować czteroliterową wiadomość do postaci binarnej:
1000011100100010001011000110
Sprawdź swoją wiedzę
Jakie słowo reprezentują dane binarne zakodowane w ASCII?
Wybierz 1 odpowiedź:

Istnieje jednak kilka problemów z kodowaniem ASCII.
Pierwszym dużym problemem jest to, że ASCII zawiera tylko litery z alfabetu angielskiego i ograniczony zestaw symboli.
Język, który używa mniej niż 128 znaków, może wymyślić własną wersję ASCII do kodowania tekstu tylko w swoim języku, ale co z plikiem tekstowym zawierającym znaki z wielu języków? ASCII nie potrafił zakodować takiego ciągu znaków: "Witaj, José, czy chciałbyś Glühweina? To kosztuje jedynie 10 €".
A co z językami z tysiącami logogramów? ASCII nie jest w stanie zakodować wystarczająco wiele logogramów, aby zakodować chińskie zdanie, takie jak "你好,想要一盘饺子吗?十块钱。"
Innym problemem z kodowaniem ASCII jest to, że wykorzystuje ono 7 bitów do reprezentacji każdego znaku, podczas gdy komputery zazwyczaj przechowują informacje w bajtowych jednostkach po 8 bitów, a programiści nie lubią marnować pamięci.
Kiedy najwcześniejsze komputery po raz pierwszy zaczęły używać ASCII do kodowania znaków, różne komputery wymyślały różne sposoby wykorzystania końcowego bitu. Na przykład, komputery HP wykorzystywały ósmy bit do kodowania znaków używanych w krajach europejskich (np. "£" i "Ü"), komputery TRS-80 wykorzystywały ten bit do kodowania kolorowej grafiki, a komputery Atari wykorzystywały ten bit do kodowania 128 odwróconych białych znaków na czarnych tle.
Efekt? Plik "ASCII" utworzony w jednej aplikacji może wyglądać jak trudny do zrozumienia język, gdy zostanie otwarty w innej aplikacji kompatybilnej z "ASCII".
Komputery potrzebowały nowego kodowania, kodowania opartego na 8-bitowych bajtach, które mogłoby reprezentować wszystkie języki świata.

Unicode

Po pierwsze jednak, ile znaków potrzebujesz, aby reprezentować języki świata? Które znaki są w zasadzie takie same we wszystkich językach, nawet jeśli mają różne dźwięki?
W 1987 roku grupa inżynierów komputerowych próbowała odpowiedzieć na te pytania. Ostatecznie opracowali Unicode, uniwersalny zestaw znaków, który przypisuje każdemu z nich "punkt kodowy" (liczbę szesnastkową) i nazwę każdemu znakowi. 3
Na przykład, znak "ą" jest przypisany do "U+0105" i nazwany "Latin Small Letter A with Ogonek". Istnieje znak, który wygląda jak "ą" w 13 językach, takich jak polski i litewski. Tak więc, według Unicode, "ą" w polskim słowie "robią" i "ą" w litewskim słowie "aslą" są tymi samymi znakami. Unicode oszczędza miejsce poprzez ujednolicenie znaków w różnych językach.
Ale wciąż jest wiele znaków do zakodowania. Zestaw znaków Unicode rozpoczął się w 1991 roku od 7,129 nazwanych znaków, a w 2019 roku powiększył się do 137 929 znaków. Większość tych znaków opisuje logogramy z języka chińskiego, japońskiego i koreańskiego, takie jak "U+6728", który odnosi się do „木”. Zawiera także ponad 1200 symboli emotikon ("U+1F389" = "🎉"). 4
Unicode jest zestawem znaków, ale nie jest to kodowanie. Na szczęście, inna grupa inżynierów zajęła się problemem sprawnego kodowania Unicode do postaci binarnej.

UTF-8

W 1992 roku informatycy wynaleźli UTF-8, kodowanie zgodne z kodowaniem ASCII, ale również rozwiązujące jego problemy. 5
UTF-8 może opisać każdy znak ze standardu Unicode za pomocą 1, 2, 3 lub 4 bajtów.
Kiedy program komputerowy czyta plik tekstowy UTF-8, wie, ile bajtów reprezentuje kolejny znak na podstawie tego, ile bitów z 1 znajduje na początku bajtu.
Liczba bajtów1 Bit2 Bit3 Bit4 Bit
10xxxxxxx
2110xxxxx10xxxxxx
31110xxxx10xxxxxx10xxxxxx
411110xxx10xxxxxx10xxxxxx10xxxxxx
Jeżeli w prefiksie nie ma bitu 1 (jeżeli pierwszym bitem jest 0), oznacza to znak reprezentowany przez pojedynczy bajt. Pozostałe 7 bitów bajtu jest używane do reprezentowania oryginalnych 128 znaków ASCII. Oznacza to, że sekwencja 8-bitowych znaków ASCII jest również poprawną sekwencją UTF-8.
Dwa bajty rozpoczynające się od 110 są używane do kodowania pozostałych znaków z języków łacińskich (np. hiszpańskiego, niemieckiego) oraz innych języków, takich jak grecki, hebrajski i arabski. Trzy bajty rozpoczynające się od 1110 kodują większość znaków z języków azjatyckich (np. chiński, japoński, koreański). Cztery bajty rozpoczynające się od 11110 kodują wszystko inne, od rzadko używanych skryptów historycznych do coraz częściej używanych symboli emotikon.
Sprawdź swoją wiedzę
Zgodnie ze standardem UTF-8, ile znaków jest reprezentowanych przez te 8 bajtów?
0100100111110000100111111001001010011001111000101001001110001010
  • Prawidłowa odpowiedź to:
  • liczba całkowita, taka jak 6
  • właściwy uproszczony ułamek, taki jak 3/5
  • niewłaściwy uproszczony ułamek, taki jak 7/4
  • liczba mieszana, taka jak 1 3/4
  • dokładny ułamek dziesiętny, taki jak 0,75
  • wielokrotność pi, taka jak 12 pi lub 2/3 pi

Większość nowoczesnych języków programowania ma wbudowaną obsługę UTF-8, więc większość programistów nigdy nie musi dokładnie wiedzieć, jak konwertować ze znaków na postać binarną.
✏️ Spróbuj użyć JavaScript, aby zakodować ciągi w UTF-8 w poniższym formularzu. Wykorzystaj wiele języków i symboli.
Standard kodowania UTF-8 jest obecnie dominującym standardem kodowania plików HTML w sieci, stanowiącym 94,5% stron internetowych w grudniu 2019 roku. 6
🔎 Jeśli klikniesz prawym przyciskiem myszy i wybierzesz teraz "zobacz źródło strony" na tej stronie internetowej, możesz wyszukać łańcuch "utf-8" i zobaczyć, że ta strona jest zakodowana jako UTF-8.
Generalnie, dobre kodowanie to takie, które może reprezentować maksymalną ilość informacji przy najmniejszej ilości bitów. UTF-8 jest tego doskonałym przykładem, ponieważ może kodować zwykłe litery angielskie tylko 1 bajtem, ale jest na tyle elastyczny, że może kodować tysiące liter za pomocą dodatkowych bajtów.
UTF-8 jest jednak tylko jednym z możliwych sposobów kodowania. UTF-16 i UTF-32 to alternatywne kodowania, które mogą również reprezentować wszystkie znaki Unicode. Istnieją również kodowania specyficzne dla danego języka, takie jak Shift-JIS dla języka japońskiego. Programy komputerowe mogą używać kodowania, które najlepiej odpowiada ich potrzebom i ograniczeniom.

🙋🏽🙋🏻‍♀️🙋🏿‍♂️Masz pytania związane z tym zagadnieniem? Możesz zadać swoje pytanie poniżej!

Chcesz dołączyć do dyskusji?

Na razie brak głosów w dyskusji
Rozumiesz angielski? Kliknij tutaj, aby zobaczyć więcej dyskusji na angielskiej wersji strony Khan Academy.