ASCII è un sottoinsieme di UTF-8. È possibile leggere qualsiasi documento con codifica ASCII come UTF-8 e funzionerà. ASCII utilizza solo 7 bit e UTF-8 utilizza l'otto bit non utilizzato per contrassegnare le unità di codice non ASCII.
La specifica XML ha un algoritmo informale per il rilevamento della codifica che è necessario leggere la% dichiarazione di<?xml
, se presente. Una codifica potrebbe anche essere implicita da un segno di ordine dei byte all'inizio del documento.
Se nel documento non sono presenti informazioni di codifica, potresti avere informazioni di codifica da un protocollo di trasporto, ad es. HTTP o MIME. Quindi usa quello.
Ma l'ipotesi di default è UTF-8. Citando la XML 1.0 e la specifica XML 1.1:
In the absence of information provided by an external transport protocol […], it is a fatal error […] for an entity which begins with neither a Byte Order Mark nor an encoding declaration to use an encoding other than UTF-8. Note that since ASCII is a subset of UTF-8, ordinary ASCII entities do not strictly need an encoding declaration.
Qualcosa che sembra essere codificato in UTF-8 e utilizza solo il sottoinsieme compatibile ASCII all'inizio potrebbe effettivamente essere codificato in qualsiasi altra codifica compatibile ASCII, come ad esempio una codifica nella famiglia ISO 8859 (es. Latin-9 ). Quindi è ancora necessario determinare la codifica corretta tramite dichiarazioni di codifica, distinte base o trasporto dei metadati. Non cercare di annusare la codifica. Se la codifica non corrisponde ai contenuti effettivi, si tratta di un errore e non è necessario elaborare il documento non valido.