Aby komputer mógł przechowywać tekst i liczby zrozumiałe dla ludzi, musi istnieć kod, który przekształca się postacie na liczby. Standard Unicode definiuje taki kod za pomocą kodowania znaków.
Powód kodowania znaków jest tak ważny, że każde urządzenie może wyświetlać te same informacje. Niestandardowy schemat kodowania znaków może działać doskonale na jednym komputerze, ale problemy wystąpią, jeśli wyślesz ten sam tekst do kogoś innego. Nie będzie wiedział, o czym mówisz, chyba że zrozumie również schemat kodowania.
Kodowanie znaków
Każde kodowanie znaków powoduje przypisanie numeru każdemu znakowi, którego można użyć. Możesz teraz utworzyć kodowanie znaków.
Na przykład mógłbym powiedzieć, że list ZA staje się liczbą 13, a = 14, 1 = 33, # = 123 itd.
W tym miejscu pojawiają się standardy branżowe. Jeśli cały przemysł komputerowy stosuje ten sam schemat kodowania znaków, każdy komputer może wyświetlać te same znaki.
Co to jest Unicode?
ASCII (amerykański standardowy kod wymiany informacji) stał się pierwszym rozpowszechnionym schematem kodowania. Jest jednak ograniczony tylko do 128 znaków. Jest to w porządku dla najpopularniejszych angielskich znaków, cyfr i interpunkcji, ale jest nieco ograniczające dla reszty świata.
Oczywiście reszta świata chce również tego samego schematu kodowania dla swoich postaci. Jednak przez pewien czas, w zależności od tego, gdzie byłeś, mógł być wyświetlany inny znak dla tego samego kodu ASCII.
W końcu inne części świata zaczęły tworzyć własne schematy kodowania, a sprawy zaczęły się nieco mylić. Nie tylko schematy kodowania o różnej długości, programy musiały dowiedzieć się, jakiego schematu kodowania powinni użyć.
Stało się jasne, że potrzebny jest nowy schemat kodowania znaków, to jest w momencie, gdy został stworzony standard Unicode. Celem Unicode jest ujednolicenie wszystkich różnych schematów kodowania, tak aby zamieszanie między komputerami było jak najbardziej ograniczone.
Obecnie standard Unicode określa wartości dla ponad 128 000 znaków i można je zobaczyć na stronie Konsorcjum Unicode. Ma kilka postaci kodowania znaków:
- UTF-8: Używa tylko jednego bajtu (8 bitów) do kodowania znaków angielskich. Może używać sekwencji bajtów do kodowania innych znaków. UTF-8 jest szeroko stosowany w systemach poczty elektronicznej i Internecie.
- UTF-16: Używa dwóch bajtów (16 bitów) do kodowania najczęściej używanych znaków. W razie potrzeby dodatkowe znaki mogą być reprezentowane przez parę 16-bitowych liczb.
- UTF-32: Wykorzystuje cztery bajty (32 bity) do kodowania znaków. Okazało się, że wraz ze wzrostem standardu Unicode 16-bitowa liczba jest zbyt mała, aby reprezentować wszystkie znaki. UTF-32 może reprezentować każdy znak Unicode jako jedną liczbę.
Uwaga: UTF oznacza jednostkę transformacji Unicode.
Punkty kodowe
Punkt kodowy to wartość, jaką znak otrzymuje w standardzie Unicode. Wartości według Unicode są zapisywane jako liczby szesnastkowe i mają prefiks U +.
Na przykład, aby zakodować znaki, które oglądaliśmy wcześniej:
- ZA to U + 0041
- za to U + 0061
- 1 to U + 0031
- # to U + 0023
Te punkty kodowe są podzielone na 17 różnych sekcji zwanych płaszczyznami, oznaczonych numerami od 0 do 16. Każdy samolot ma 65 536 punktów kodowych. Pierwsza płaszczyzna, 0, zawiera najczęściej używane znaki i jest znana jako Basic Multilingual Plane (BMP).
Jednostki kodu
Schematy kodowania składają się z jednostek kodu, które służą do zapewnienia indeksu położenia znaku na płaszczyźnie.
Rozważ UTF-16 jako przykład. Każdy 16-bitowy numer jest jednostką kodu. Jednostki kodowe można przekształcić w punkty kodowe. Na przykład symbol płaskiej nuty ♭ ma punkt kodowy U + 1D160 i żyje na drugiej płaszczyźnie standardu Unicode (dodatkowa płaszczyzna ideograficzna). Zostałby zakodowany przy użyciu kombinacji 16-bitowych jednostek kodu U + D834 i U + DD60.
W przypadku BMP wartości punktów kodowych i jednostek kodowych są identyczne. Umożliwia to skrót do UTF-16, który oszczędza dużo miejsca do przechowywania. Do reprezentowania tych znaków wystarczy użyć tylko 16-bitowej liczby.
Jak Java używa Unicode?
Jawa został utworzony w czasie, gdy standard Unicode miał wartości zdefiniowane dla znacznie mniejszego zestawu znaków. Wówczas uważano, że 16-bitów wystarczy do zakodowania wszystkich potrzebnych znaków. Mając to na uwadze, Java została zaprojektowana do korzystania z UTF-16. Typ danych char był pierwotnie używany do reprezentowania 16-bitowego punktu kodowego Unicode.
Od wersji Java SE v5.0 znak reprezentuje jednostkę kodu. Nie ma większego znaczenia przy reprezentowaniu znaków znajdujących się w podstawowej płaszczyźnie wielojęzycznej, ponieważ wartość jednostki kodowej jest taka sama jak punkt kodowy. Oznacza to jednak, że dla postaci z innych płaszczyzn potrzebne są dwa znaki.
Ważną rzeczą do zapamiętania jest to, że pojedynczy typ danych char nie może już reprezentować wszystkich znaków Unicode.