Kodowanie to odwzorowanie między bajtami i znakami z zestawu znaków, dlatego pomocne będzie omówienie i zrozumienie różnicy między bajtami a znakami .
Pomyśl o bajtach jak o liczbach od 0 do 255, podczas gdy znaki to abstrakcyjne rzeczy, takie jak „a”, „1”, „$” i „Ę”. Zestaw wszystkich dostępnych znaków nazywany jest zestawem znaków .
Każdy znak ma sekwencję jednego lub więcej bajtów, które są używane do jego reprezentacji; jednak dokładna liczba i wartość bajtów zależy od zastosowanego kodowania i istnieje wiele różnych kodowań.
Większość kodowań opiera się na starym zestawie znaków i kodowaniu zwanym ASCII, które ma jeden bajt na znak (w rzeczywistości tylko 7 bitów) i zawiera 128 znaków, w tym wiele typowych znaków używanych w amerykańskim angielskim.
Na przykład tutaj jest 6 znaków w zestawie znaków ASCII, które są reprezentowane przez wartości od 60 do 65.
Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║ Character ║
╠══════╬══════════════║
║ 60 ║ < ║
║ 61 ║ = ║
║ 62 ║ > ║
║ 63 ║ ? ║
║ 64 ║ @ ║
║ 65 ║ A ║
╚══════╩══════════════╝
W pełnym zestawie ASCII najniższa używana wartość to zero, a najwyższa 127 (oba to ukryte znaki sterujące).
Jednak gdy zaczniesz potrzebować więcej znaków niż zapewnia podstawowy ASCII (na przykład litery z akcentami, symbole walut, symbole graficzne itp.), ASCII nie jest odpowiednie i potrzebujesz czegoś bardziej rozbudowanego. Potrzebujesz więcej znaków (inny zestaw znaków) i potrzebujesz innego kodowania, ponieważ 128 znaków nie wystarczy, aby zmieścić wszystkie znaki. Niektóre kodowania oferują jeden bajt (256 znaków) lub do sześciu bajtów.
Z biegiem czasu powstało wiele kodowań. W świecie Windows istnieje CP1252 lub ISO-8859-1, podczas gdy użytkownicy Linuksa wolą UTF-8. Java natywnie używa UTF-16.
Jedna sekwencja wartości bajtów dla znaku w jednym kodowaniu może oznaczać zupełnie inny znak w innym kodowaniu, a nawet może być nieprawidłowa.
Na przykład, w ISO 8859-1 , Â jest reprezentowany przez jeden bajt wartości 226
, podczas gdy w UTF-8 to dwa bajty: 195, 162
. Jednak w ISO 8859-1 , 195, 162
byłyby dwie postacie, a, ¢ .
Kiedy komputery przechowują dane o znakach wewnętrznie lub przesyłają je do innego systemu, przechowują lub wysyłają bajty. Wyobraź sobie, że system otwierający plik lub odbierający wiadomość widzi bajty 195, 162
. Skąd wie, jakie to są postacie?
Aby system mógł zinterpretować te bajty jako rzeczywiste znaki (i wyświetlić je lub przekonwertować na inne kodowanie), musi znać zastosowane kodowanie. Dlatego kodowanie pojawia się w nagłówkach XML lub można je określić w edytorze tekstu. Informuje system o mapowaniu między bajtami i znakami.