/ / Aké je použitie "kódovania" v hlavičke XML? - xml, záhlavie, kódovanie znakov

Aké je použitie "kódovania" v hlavičke XML? - xml, záhlavie, kódovanie znakov

Pri pohľade na hlavičku XML

<?xml version="1.0" encoding="UTF-16" standalone="no"?>

Mám právo uviesť, že encoding atribút je

  • príliš neskoro (nemôžete to správne prečítať, pokiaľ nepoznáte kódovanie ...)
  • redundantný, a preto je náchylný na chyby: je to príliš jednoduché nahradiť ho "Big5", ale uložte súbor do súboru utf-8

Alebo tento atribút nie je o obsah prúdu?

Rozmýšľam tu veci?

odpovede:

41 pre odpoveď č. 1

Ako ste spomenuli, mali by ste vedieť kódovanie súboru na čítanie encoding atribút.

Existuje však heuristika, ktorá vám môže ľahko dostať blízko k "skutočnému" kódovaniu, ktoré vám umožní čítať atribút kódovania. To funguje, pretože <?xml časť podľa definície môže obsahovať iba znaky v rozsahu ASCII (akokoľvek sú zakódované).

Norma XML dokonca opisuje presný proces, ktorý sa používa na zistenie kódovania.

A kódovanie štítku nie je redundantné.Napríklad, ak používate algoritmus v XML spec zistiť, že niektoré ASCII (alebo ASCII-kompatibilné) kódovanie sa používa stále potrebujete čítať kódovanie, aby ste zistili, ktorý z nich skutočne používa (platnými kandidátmi by boli ASCII, utf-8, ktorýkoľvek z ISO-8859- * kódovanie, niektoré z Windows- * kódovanie, KOI8-R a mnoho, mnoho ďalších). Pre <?xml časť sama o sebe nebude mať rozdiel, ktorý z nich je, ale pre zvyšok dokumentu môže mať obrovský rozdiel.

Pokiaľ ide o nesprávne označené súbory XML: áno, je ľahké ich vyrobiť, Avšak: Špecifikácia XML jasne špecifikuje, že tieto súborysú malformované a ako také nie sú správne XML. Nesprávne kódovanie sa musí nahlásiť ako chyba (pokiaľ je možné ju zistiť!). Takže je to problém toho, kto vytvára XML.


6 pre odpoveď č. 2

Ste úplne pravda, že to vyzerá zvláštnedizajnu. Funguje to len preto, že deklarácia XML používa iba znaky ASCII a takmer všetky kódovania sú nadradené ASCII. Ak ste pripravení prijať niečo, čo nie je, napríklad EBCDIC, môžete skontrolovať, či súbor začína bez ohľadu na EBCDIC reprezentáciu "<?xml" je. To znamená, že sa spoliehate na všeobecnú úroveň redundancie v hlavičke súboru, a nie na samotný atribút kódovania. Rovnako ako veľa vecí v XML, je to pragmatické a funguje, ale nie je obzvlášť elegantné.


2 pre odpoveď č. 3

Parsery XML sa vyžadujú iba na podporuutf-8 a UTF-16. Syntaktický analyzátor XML začína skúšaním kódovania podľa bajtovej značky (BOM), ak je prítomná (pre UTF-16, UTF-32 a dokonca aj utf-8 s figurínou dummy). Ak sa nenájde, potom analyzátor skúša kódovanie UTF-32, UTF-16, utf-8, ASCII a iné kódovanie ASCII kompatibilné s jedným bajtom. Len potom uvidí atribút kódovania a v prípade potreby reštartuje analýzu.


0 pre odpoveď č. 4

Myslím, že v zásade by ste mohli mať na mysli to, že encoding vyhlásenie je "neskoro" v súbore, avšak celý prvý riadok používa iba základné znaky. AFAIK, tie sú rovnaké v takmer všetkých kódovaniach, takže čokoľvek ju dekódujete, bude to "čítať <?xml ... ?> tak ako tak.

Čokoľvek príde neskôr že mohlo by to mať vplyv. Napríklad text v sekcii CDATA môže byť zakódovaný v cyrilikovom kódovaní.