Aby zrozumieć atrybut „encoding”, musisz zrozumieć różnicę między bajtami a znakami .
Pomyśl o bajtach jako o liczbach od 0 do 255, podczas gdy znaki to takie rzeczy 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 zawiera 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 wystarcza, 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 preferują 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, ¢ .
Pomyśl o XML nie jako o sekwencji znaków, ale o sekwencji bajtów.
Wyobraź sobie, że system odbierający XML widzi bajty 195, 162
. Skąd wie, jakie to postacie?
Aby system mógł zinterpretować te bajty jako rzeczywiste znaki (a więc wyświetlić je lub przekonwertować na inne kodowanie), musi znać kodowanie używane w XML.
Ponieważ większość typowych kodowań jest kompatybilna z ASCII, jeśli chodzi o podstawowe znaki alfabetu i symbole, w takich przypadkach sama deklaracja może uciec z użyciem tylko znaków ASCII do określenia kodowania. W innych przypadkach parser musi spróbować ustalić kodowanie deklaracji. Ponieważ wie, że deklaracja zaczyna się od <?xml
, jest o wiele łatwiejsza do zrobienia.
Na koniec version
atrybut określa wersję XML, której obecnie są dwie (zobacz wersje XML Wikipedii . Istnieją niewielkie różnice między wersjami, więc parser XML musi wiedzieć, z czym ma do czynienia. W większości przypadków (dla języka angielskiego głośniki i tak), wersja 1.0 jest wystarczająca.