Because the contents of the encoding declaration are restricted to characters from the ASCII repertoire (however encoded), a processor can reliably read the entire encoding declaration as soon as it has detected which family of encodings is in use.
Nepletete vy si znaky a bajty?
Mám kódování, kde se znak
< (hodnota 60) zapisuje jako dvojice oktetů
3C 3F, znak
? (hodnota 63) jako dvojice oktetů
78 6D, znak
x (hodnota 120) jako dvojice oktetů
6C 20 atd. Standard je splněn, znaky
<,
? i
x jsou znaky z ASCII, i celá deklarace kódování jsou jen znaky z ASCII, protože pevné části deklarace jsou znaky z ASCII a název kódování jsou také znaky z ASCII.
Akorát je tu pořád ten problém, že existují kódování, která znaky ASCII (ani z její dolní poloviny) nekódují do oktetů stejně, jako kódování ASCII. Příkladem takových kódování jsou UTF-16 nebo UCS-4.
Ne, žádné další kódování nebude hádat, proč by to dělal? Hlavička je úspěšně načtena a je v ní uvedeno kódování BLABLA.
A jak se to podařilo tu hlavičku načíst, když k jejímu správnému přečtení je potřeba vědět, že je v kódování BLABLA? A když to nevíte a pokusíte se to přečíst jako ASCII, dostanete jiný text?
Zajímavé je, že nikdo z autorů XML parserů s tímto neměl nikdy problém
Ano, protože parsery řeší pár vybraných kódování. Ale standard, který připouští libovolné kódování, pokud je černé, je trochu divný.
Není potřeba, už jsi to zkopíroval a vložil.
Já jsem vkládal pouze části, které se týkají zpracování znaků. V souborech jsou ovšem bajty (oktety), které je potřeba na znaky převést. Jak se mají převést, to určuje právě kódování. Jenže abych se dozvěděl kódování, musím nejprve přečíst text – ve správném kódování. Dnešní parsery to dělají tak, že zkusí tipnout varianty UCS-2 a UCS-4, pokud to nevychází, mohou tipnout ještě EBCDIC, a pokud ani to nevyjde, předpokládají, že jde o kódování, které znaky 0–127 kóduje stejně, jako ASCII. Takže když narazí na kódování, které tyhle znaky kóduje jinak, nedopadne to dobře – v lepším případě parser skončí chybou kvůli neočekávaným znakům, v horším případě ty oktety budou dávat smysl i pokud budou čtené jako ASCII, a parser načte něco úplně jiného, než v souboru je ve skutečnosti.