Znaczenie - <? Xml version = „1.0” encoding = „utf-8”?>


103

Jestem nowy w XML i próbuję zrozumieć podstawy. Przeczytałem poniższy wiersz w „Learning XML”, ale nadal nie jest to dla mnie jasne. Czy ktoś może wskazać mi książkę lub stronę internetową, która jasno wyjaśnia te podstawy?

Z Learning XML :

Deklaracja XML opisuje niektóre z najbardziej ogólnych właściwości dokumentu, informując procesor XML, że potrzebuje parsera XML do interpretacji tego dokumentu.

Co to znaczy?

Rozumiem xml versionczęść - zarówno dokument, jak i użytkownik dokumentu powinni „rozmawiać” w tej samej wersji XML. Ale co z tą encodingczęścią? Dlaczego jest to konieczne?



Odpowiedzi:


126

Aby zrozumieć atrybut „encoding”, musisz zrozumieć różnicę między bajtami a znakami .

Pomyśl o bajtach jako o liczbach od 0 do 255, podczas gdy znaki to takie rzeczy jak „a”, „1” i „Ę”. Zestaw wszystkich dostępnych znaków nazywany jest zestawem znaków .

Każdy znak ma sekwencję jednego lub więcej bajtów, które są używane do jego reprezentacji; jednak dokładna liczba i wartość bajtów zależy od zastosowanego kodowania i istnieje wiele różnych kodowań.

Większość kodowań opiera się na starym zestawie znaków i kodowaniu zwanym ASCII, które zawiera jeden bajt na znak (w rzeczywistości tylko 7 bitów) i zawiera 128 znaków, w tym wiele typowych znaków używanych w amerykańskim angielskim.

Na przykład tutaj jest 6 znaków w zestawie znaków ASCII, które są reprezentowane przez wartości od 60 do 65.

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

W pełnym zestawie ASCII najniższa używana wartość to zero, a najwyższa 127 (oba to ukryte znaki sterujące).

Jednak gdy zaczniesz potrzebować więcej znaków niż zapewnia podstawowy ASCII (na przykład litery z akcentami, symbole walut, symbole graficzne itp.), ASCII nie jest odpowiednie i potrzebujesz czegoś bardziej rozbudowanego. Potrzebujesz więcej znaków (inny zestaw znaków) i potrzebujesz innego kodowania, ponieważ 128 znaków nie wystarcza, aby zmieścić wszystkie znaki. Niektóre kodowania oferują jeden bajt (256 znaków) lub do sześciu bajtów.

Z biegiem czasu powstało wiele kodowań. W świecie Windows istnieje CP1252 lub ISO-8859-1, podczas gdy użytkownicy Linuksa preferują UTF-8. Java natywnie używa UTF-16.

Jedna sekwencja wartości bajtów dla znaku w jednym kodowaniu może oznaczać zupełnie inny znak w innym kodowaniu, a nawet może być nieprawidłowa.

Na przykład, w ISO 8859-1 , Â jest reprezentowany przez jeden bajt wartości 226, podczas gdy w UTF-8 to dwa bajty: 195, 162. Jednak w ISO 8859-1 , 195, 162byłyby dwie postacie, a, ¢ .

Pomyśl o XML nie jako o sekwencji znaków, ale o sekwencji bajtów.

Wyobraź sobie, że system odbierający XML widzi bajty 195, 162. Skąd wie, jakie to postacie?

Aby system mógł zinterpretować te bajty jako rzeczywiste znaki (a więc wyświetlić je lub przekonwertować na inne kodowanie), musi znać kodowanie używane w XML.

Ponieważ większość typowych kodowań jest kompatybilna z ASCII, jeśli chodzi o podstawowe znaki alfabetu i symbole, w takich przypadkach sama deklaracja może uciec z użyciem tylko znaków ASCII do określenia kodowania. W innych przypadkach parser musi spróbować ustalić kodowanie deklaracji. Ponieważ wie, że deklaracja zaczyna się od <?xml, jest o wiele łatwiejsza do zrobienia.

Na koniec versionatrybut określa wersję XML, której obecnie są dwie (zobacz wersje XML Wikipedii . Istnieją niewielkie różnice między wersjami, więc parser XML musi wiedzieć, z czym ma do czynienia. W większości przypadków (dla języka angielskiego głośniki i tak), wersja 1.0 jest wystarczająca.


9
„Sam nagłówek używa kodowania ASCII”: Myślę, że odwołujesz się do deklaracji XML. Jest zakodowany jak reszta dokumentu; UTF-16 lub coś innego. Procesor XML może wykonać kilka prób, zanim będzie mógł odczytać specyfikację kodowania.
Tom Blodget,

1
Odniosłem wrażenie, że preambuła / prolog ma być zakodowana w UTF-8 i to mówi parserowi, jak konwertować pozostałe bajty (rzeczywisty dokument XML) na poprawne kodowanie. Znowu źle! :-)
Kelly Beard


26

Deklaracja XML nie jest wymagana we wszystkich dokumentach XML; jednakże autorzy dokumentów XHTML są zdecydowanie zachęcani do używania deklaracji XML we wszystkich swoich dokumentach. Taka deklaracja jest wymagana, gdy kodowanie znaków dokumentu jest inne niż domyślne UTF-8 lub UTF-16 i żadne kodowanie nie zostało określone przez protokół wyższego poziomu. Oto przykład dokumentu XHTML. W tym przykładzie dołączona jest deklaracja 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>

Proszę zapoznać się ze standardami W3 dla XML .


4
że xml prowadzi do xhtml. czy miałeś na myśli link do xml w3.org/TR/xml, czy też chciałeś nazwać link xhtml?
jrwren,

Xhtml odnosi się do dokumentacji XML. Deklaracja typu dokumentu nie jest wymagana w przypadku dobrze sformułowanego pliku XML.
xvan

„Proszę zapoznać się ze standardami W3 dla XML”. IOW, przeczytaj często zadawane pytania, które są obszernym dokumentem. Dlaczego ludzie nie mogą po prostu wyjaśnić, co to jest „?” robi i dlaczego tam jest ???
Blessed Geek

3

To jest opcjonalna preambuła XML .

  • version="1.0" oznacza, że ​​jest to standard XML zgodny z tym plikiem
  • encoding="utf-8" oznacza, że ​​plik jest zakodowany przy użyciu kodowania UTF-8 Unicode


2

Czy ktoś może wskazać mi książkę lub stronę internetową, która jasno wyjaśnia te podstawy?

Możesz sprawdzić ten samouczek XML z przykładami.

Ale co z częścią dotyczącą kodowania? Dlaczego jest to konieczne?

W3C podaje wyjaśnienie dotyczące kodowania:

„Zestaw znaków dokumentu dla XML i HTML 4.0 to Unicode (aka ISO 10646). Oznacza to, że przeglądarki HTML i procesory XML powinny zachowywać się tak, jakby używały Unicode wewnętrznie. Nie oznacza to jednak, że dokumenty muszą być przesyłane w Unicode. O ile klient i serwer zgadzają się co do kodowania, mogą używać dowolnego kodowania, które można przekonwertować na Unicode ... ”


-1

Deklaracja XML w mapie dokumentu składa się z następujących elementów:

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

To jest obowiązkowe. Chociaż liczba ta może ulec zmianie w przyszłych wersjach XML, wersja 1.0 jest wersją bieżącą.

Deklaracja kodowania,

encoding="UTF-8"?

To jest opcjonalne. Jeśli jest używana, deklaracja kodowania musi pojawić się bezpośrednio po informacji o wersji w deklaracji XML i musi zawierać wartość reprezentującą istniejące kodowanie znaków.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.