ASCII i Unicode to oba standardy, które odnoszą się do cyfrowej reprezentacji tekstu, w szczególności znaków tworzących tekst. Jednak te dwa standardy znacznie się różnią, a wiele właściwości odzwierciedla ich kolejność tworzenia.
Ameryka kontra Wszechświat
Nic dziwnego, że American Standard Code for Information Interchange (ASCII) jest przeznaczony dla odbiorców amerykańskich, pisząc alfabetem angielskim. Zajmuje się literami bez akcentów, takimi jak AZ i az, a także niewielką liczbą znaków interpunkcyjnych i znaków sterujących.
W szczególności nie ma możliwości przedstawienia wyrazów zapożyczonych zapożyczonych z innych języków, takich jak cafe w ASCII, bez ich zangalizowania przez zastąpienie znaków akcentowanych (np. cafe ). Zlokalizowane rozszerzenia ASCII zostały opracowane w celu zaspokojenia potrzeb różnych języków, ale te wysiłki sprawiły, że interoperacyjność była niewygodna i wyraźnie rozszerzała możliwości ASCII.
W przeciwieństwie do tego, Universal Coded Character Set (Unicode) znajduje się na przeciwległym końcu skali ambicji. Unicode stara się obsłużyć jak najwięcej systemów pisma na świecie, do tego stopnia, że obejmuje starożytne języki i ulubiony przez wszystkich zestaw ekspresyjnych symboli, emoji.
Zestaw znaków czy kodowanie znaków?
Mówiąc prościej, zestaw znaków to wybór znaków (np. AZ), podczas gdy kodowanie znaków to odwzorowanie między zestawem znaków a wartością, którą można przedstawić cyfrowo (np. A=1, B=2).
Standard ASCII jest w rzeczywistości zarówno: definiuje zestaw znaków, które reprezentuje, jak i metodę mapowania każdego znaku na wartość liczbową.
Natomiast słowo Unicode jest używane w kilku różnych kontekstach, aby oznaczać różne rzeczy. Możesz myśleć o tym jako o wszechogarniającym terminie, takim jak ASCII, odnoszącym się do zestawu znaków i wielu kodowań. Ale ponieważ istnieje kilka kodowań, termin Unicode jest często używany w odniesieniu do ogólnego zestawu znaków, a nie sposobu ich mapowania.
Rozmiar
Ze względu na swój zakres Unicode reprezentuje znacznie więcej znaków niż ASCII. Standardowy ASCII używa zakresu 7-bitowego do kodowania 128 różnych znaków . Z drugiej strony Unicode jest tak duży, że musimy używać innej terminologii tylko po to, by o tym mówić!
Unicode obsługuje 1111998 adresowalnych punktów kodowych. Punkt kodowy jest z grubsza analogiczny do miejsca zarezerwowanego dla postaci, ale sytuacja jest o wiele bardziej skomplikowana niż ta, gdy zaczynasz zagłębiać się w szczegóły!
Bardziej przydatnym porównaniem jest liczba obsługiwanych obecnie skryptów (lub systemów pisania). Oczywiście ASCII obsługuje tylko alfabet angielski, zasadniczo pismo łacińskie lub rzymskie. Wersja Unicode wyprodukowana w 2020 roku idzie znacznie dalej: obejmuje obsługę łącznie 154 skryptów.
Składowanie
7-bitowy zakres ASCII oznacza, że każdy znak jest przechowywany w pojedynczym 8-bitowym bajcie; zapasowy bit nie jest używany w standardowym ASCII. To sprawia, że obliczenia rozmiaru są trywialne: długość tekstu w znakach to rozmiar pliku w bajtach.
Możesz to potwierdzić za pomocą następującej sekwencji poleceń bash. Najpierw tworzymy plik zawierający 12 liter tekstu:
$ echo -n 'Hello, world' > foo
Aby sprawdzić, czy tekst jest zakodowany w ASCII, możemy użyć polecenia file :
$ file foo foo: ASCII text, with no line terminators
Na koniec, aby uzyskać dokładną liczbę bajtów zajmowanych przez plik, używamy polecenia stat :
$ stat -f%z foo 12
Ponieważ standard Unicode zajmuje się znacznie większym zakresem znaków, plik Unicode naturalnie zajmuje więcej miejsca. Dokładnie ile zależy od kodowania.
Powtarzanie tego samego zestawu poleceń co wcześniej, przy użyciu znaku, którego nie można przedstawić w ASCII, daje następujące wyniki:
$ echo -n '€' > foo $ file foo foo: UTF-8 Unicode text, with no line terminators $ stat -f%z foo 3
Ten pojedynczy znak zajmuje 3 bajty w pliku Unicode. Zauważ, że bash automatycznie utworzył plik UTF-8, ponieważ plik ASCII nie może przechowywać wybranego znaku (€). UTF-8 jest zdecydowanie najbardziej powszechnym kodowaniem znaków dla Unicode; UTF-16 i UTF-32 to dwa alternatywne kodowania, ale są one używane znacznie rzadziej.
UTF-8 to kodowanie o zmiennej szerokości, co oznacza, że używa różnych ilości pamięci dla różnych punktów kodowych. Każdy punkt kodowy zajmie od jednego do czterech bajtów, z zamiarem, aby bardziej popularne znaki wymagały mniej miejsca, zapewniając rodzaj wbudowanej kompresji. Wadą jest to, że określenie wymagań dotyczących długości lub rozmiaru danego fragmentu tekstu staje się znacznie bardziej skomplikowane.
ASCII to Unicode, ale Unicode to nie ASCII
Aby zapewnić zgodność z poprzednimi wersjami, pierwsze 128 punktów kodowych Unicode reprezentują równoważne znaki ASCII. Ponieważ UTF-8 koduje każdy z tych znaków za pomocą jednego bajtu, każdy tekst ASCII jest również tekstem UTF-8. Unicode to nadzbiór ASCII.
Jednak, jak pokazano powyżej, wielu plików Unicode nie można używać w kontekście ASCII. Każdy znak, który jest poza granicami, zostanie wyświetlony w nieoczekiwany sposób, często z podstawionymi znakami, które są zupełnie inne niż te, które były zamierzone.
Nowoczesne zastosowanie
W większości przypadków ASCII jest w dużej mierze uważany za przestarzały standard. Nawet w sytuacjach, które obsługują tylko skrypt łaciński — gdzie na przykład pełna obsługa złożoności Unicode jest niepotrzebna — zwykle wygodniej jest używać UTF-8 i korzystać z jego kompatybilności z ASCII.
W szczególności strony internetowe powinny być zapisywane i przesyłane przy użyciu UTF-8, który jest domyślny dla HTML5. Jest to w przeciwieństwie do wcześniejszej sieci, która domyślnie zajmowała się ASCII, zanim została zastąpiona przez Latin 1.
Standard, który się zmienia
Ostatnia rewizja ASCII miała miejsce w 1986 roku.
W przeciwieństwie do tego, Unicode jest aktualizowany co roku. Regularnie dodawane są nowe skrypty, postacie, a zwłaszcza nowe emoji. Mając tylko niewielką część tych przydzielonych, pełny zestaw znaków prawdopodobnie będzie rósł i rósł w dającej się przewidzieć przyszłości.
Powiązane: Wyjaśnienie 100 najpopularniejszych emotikonów
ASCII kontra Unicode
ASCII służył swojemu celowi przez wiele dziesięcioleci, ale Unicode teraz skutecznie zastąpił go we wszystkich praktycznych celach innych niż starsze systemy. Unicode jest większy, a przez to bardziej wyrazisty. Stanowi ogólnoświatowy, wspólny wysiłek i oferuje znacznie większą elastyczność, aczkolwiek kosztem pewnej złożoności.