Posso usare la codifica US-ASCII e UTF-8 in modo intercambiabile per un file XML senza una dichiarazione radice XML?

1

La mia fonte XML NON contiene la dichiarazione radice i.e.

<?xml version="1.0" encoding="utf-8" ?>

E quando eseguo il comando file , ho:

ASCII text, with very long lines, with CRLF line terminators

Posso tranquillamente utilizzare US-ASCII o UTF-8 in modo intercambiabile durante la lettura dell'XML?

    
posta socgen hacker 24.11.2014 - 22:43
fonte

2 risposte

5

US-ASCII è un codice a 7 bit ed è un vero sottoinsieme di UTF-8. In altre parole, il file ASCII ogni è per definizione anche un file UTF-8. Il comando file lo classifica come 'ASCII' perché non ci sono caratteri a 8 bit, ed è assolutamente giusto farlo.

Tuttavia dovresti sempre leggere i file XML assumendo che siano codificati in UTF8. Non fa male anche se non ci sono caratteri a 8 bit, ma se ci sono, leggerlo come ASCII sarebbe semplicemente sbagliato.

    
risposta data 24.11.2014 - 22:54
fonte
3

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.

    
risposta data 24.11.2014 - 23:02
fonte

Leggi altre domande sui tag