Significato di - <? Xml version = "1.0" encoding = "utf-8"?>


103

Sono nuovo in XML e sto cercando di capire le basi. Ho letto la riga sottostante in "Learning XML", ma non è ancora chiara per me. Qualcuno può indicarmi un libro o un sito web che spieghi chiaramente queste basi?

Da Learning XML :

La dichiarazione XML descrive alcune delle proprietà più generali del documento, dicendo al processore XML che ha bisogno di un parser XML per interpretare questo documento.

Cosa significa questo?

Capisco la xml versionparte: sia doc che l'utente di doc dovrebbero "parlare" nella stessa versione di XML. Ma per quanto riguarda la encodingparte? Perché è necessario?



Risposte:


126

Per capire l'attributo "codifica", devi capire la differenza tra byte e caratteri .

Pensa ai byte come numeri compresi tra 0 e 255, mentre i caratteri sono cose come "a", "1" e "Ä". Il set di tutti i caratteri disponibili è chiamato set di caratteri .

Ogni carattere ha una sequenza di uno o più byte che vengono utilizzati per rappresentarlo; tuttavia, il numero e il valore esatti dei byte dipendono dalla codifica utilizzata e ci sono molte codifiche differenti.

La maggior parte delle codifiche si basa su un vecchio set di caratteri e una codifica chiamata ASCII che è un singolo byte per carattere (in realtà, solo 7 bit) e contiene 128 caratteri, inclusi molti dei caratteri comuni utilizzati nell'inglese americano.

Ad esempio, qui ci sono 6 caratteri nel set di caratteri ASCII che sono rappresentati dai valori da 60 a 65.

Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║  Character   ║
╠══════╬══════════════║
║  60  ║      <       ║
║  61  ║      =       ║
║  62  ║      >       ║
║  63  ║      ?       ║
║  64  ║      @       ║
║  65  ║      A       ║
╚══════╩══════════════╝

Nel set ASCII completo, il valore più basso utilizzato è zero e il più alto è 127 (entrambi sono caratteri di controllo nascosti).

Tuttavia, una volta che inizi a richiedere più caratteri di quelli forniti dall'ASCII di base (ad esempio, lettere con accenti, simboli di valuta, simboli grafici, ecc.), ASCII non è adatto e hai bisogno di qualcosa di più ampio. Hai bisogno di più caratteri (un set di caratteri diverso) e hai bisogno di una codifica diversa poiché 128 caratteri non sono sufficienti per contenere tutti i caratteri. Alcune codifiche offrono un byte (256 caratteri) o fino a sei byte.

Nel tempo sono state create molte codifiche. Nel mondo Windows, c'è CP1252, o ISO-8859-1, mentre gli utenti Linux tendono a preferire UTF-8. Java utilizza UTF-16 in modo nativo.

Una sequenza di valori di byte per un carattere in una codifica potrebbe rappresentare un carattere completamente diverso in un'altra codifica o potrebbe anche non essere valida.

Ad esempio, in ISO 8859-1 , â è rappresentato da un byte di valore 226, mentre in UTF-8 è due byte: 195, 162. Tuttavia, in ISO 8859-1 , 195, 162sarebbero due caratteri, Ã, ¢ .

Pensa all'XML non come a una sequenza di caratteri ma a una sequenza di byte.

Immagina che il sistema che riceve l'XML veda i byte 195, 162. Come fa a sapere quali personaggi sono questi?

Affinché il sistema possa interpretare quei byte come caratteri effettivi (e quindi visualizzarli o convertirli in un'altra codifica), deve conoscere la codifica utilizzata nell'XML.

Poiché le codifiche più comuni sono compatibili con ASCII, per quanto riguarda i caratteri alfabetici e i simboli di base, in questi casi, la dichiarazione stessa può farla franca utilizzando solo i caratteri ASCII per dire quale sia la codifica. In altri casi, il parser deve cercare di capire la codifica della dichiarazione. Poiché sa che la dichiarazione inizia con <?xml, è molto più facile farlo.

Infine, l' versionattributo specifica la versione XML, di cui ce ne sono due al momento (vedi Wikipedia versioni XML . Ci sono lievi differenze tra le versioni, quindi un parser XML deve sapere con cosa ha a che fare. Nella maggior parte dei casi (per l'inglese altoparlanti comunque), la versione 1.0 è sufficiente.


9
"L'intestazione stessa utilizza la codifica ASCII": penso che ti riferisci alla dichiarazione XML. È codificato come il resto del documento; UTF-16 o altro. Un processore XML può eseguire alcune prove finché non è in grado di leggere le specifiche di codifica.
Tom Blodget,

1
Avevo l'impressione che il preambolo / prologo dovesse essere codificato in UTF-8 e che spiegasse al parser come convertire i byte rimanenti (il documento XML effettivo) nella codifica corretta. Sbagliato di nuovo! :-)
Kelly Beard

5
Ecco una lettura suggerita: joelonsoftware.com/2003/10/08/…
Sudip Bhandari

26

Una dichiarazione XML non è richiesta in tutti i documenti XML; tuttavia, gli autori di documenti XHTML sono fortemente incoraggiati a usare dichiarazioni XML in tutti i loro documenti. Tale dichiarazione è richiesta quando la codifica dei caratteri del documento è diversa da quella predefinita UTF-8 o UTF-16 e nessuna codifica è stata determinata da un protocollo di livello superiore. Ecco un esempio di un documento XHTML. In questo esempio, è inclusa la dichiarazione XML.

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html 
 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Virtual Library</title>
  </head>
  <body>
    <p>Moved to <a href="http://example.org/">example.org</a>.</p>
 </body>
</html>

Fare riferimento agli standard W3 per XML .


4
che xml si collega a xhtml. intendevi collegare a xml w3.org/TR/xml o intendi chiamare il collegamento xhtml?
jrwren

Xhtml si riferisce alla documentazione xml. La dichiarazione del tipo di documento non è richiesta per XML ben formato.
xvan

"Fare riferimento agli standard W3 per XML." IOW, vai a leggere le faqing faq, che è un documento lungo e lungo. Perché le persone non possono spiegare semplicemente cosa "?" fa e perché è lì ???
Blessed Geek

3

Questo è il preambolo opzionale XML .

  • version="1.0" significa che questo è lo standard XML a cui è conforme questo file
  • encoding="utf-8" significa che il file è codificato utilizzando la codifica Unicode UTF-8


2

Qualcuno può indicarmi un libro o un sito web che spieghi chiaramente queste basi?

Puoi controllare questo tutorial XML con esempi.

Ma per quanto riguarda la parte di codifica? Perché è necessario?

W3C fornisce spiegazioni sulla codifica:

"Il set di caratteri del documento per XML e HTML 4.0 è Unicode (noto anche come ISO 10646). Ciò significa che i browser HTML e i processori XML dovrebbero comportarsi come se usassero Unicode internamente. Ma ciò non significa che i documenti debbano essere trasmessi in Unicode. Finché client e server concordano sulla codifica, possono utilizzare qualsiasi codifica che può essere convertita in Unicode ... "


-1

La dichiarazione XML nella mappa del documento è composta da quanto segue:

The version number, ?xml version="1.0"?. 

Questo è obbligatorio. Sebbene il numero possa cambiare per le versioni future di XML, 1.0 è la versione corrente.

La dichiarazione di codifica,

encoding="UTF-8"?

Questo è opzionale. Se utilizzata, la dichiarazione di codifica deve apparire immediatamente dopo le informazioni sulla versione nella dichiarazione XML e deve contenere un valore che rappresenta una codifica di caratteri esistente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.