2011-04-14 28 views
6

Co to jest kodowanie w języku XML? Użyte normalne kodowanie to utf-8. Czym różni się od innych kodowań? Jaki jest cel jego używania?Co to jest kodowanie w języku XML?

+0

Zobacz W3C [zalecenie dotyczące kodowania] (http://www.w3.org/TR/xml/#charencoding). – Nishant

+0

@Nishant: to nie jest dobre wprowadzenie do tematu kodowania znaków w ogóle. I myślę, że o to właśnie chodzi w tym pytaniu. –

+0

Właśnie dodałem specyfikacje XML jako wskazane przez OP, "normalnym używanym kodowaniem jest UTF-8". To nie ma być odpowiedź. – Nishant

Odpowiedz

8

character encoding określa sposób znaki są odwzorowywane na bajtach. Ponieważ dokumenty XML są przechowywane i przesyłane jako strumienie bajtów, jest to konieczne do reprezentowania znaków Unicode, które składają się na dokument XML.

UTF-8 zostanie wybrany jako domyślny, ponieważ ma kilka zalet:

  • jest to zgodne z ASCII, że wszystkie ważne ASCII zakodowanego tekstu jest również ważne kodowanie UTF-8 (ale niekoniecznie na odwrót !)
  • używa tylko 1 bajt na znak dla „zwykłych” liter (tych, które występują również w ASCII)
  • może reprezentować wszystkich istniejących znaków Unicode

Kodowanie znaków jest bardziej ogólnym tematem niż tylko XML. UTF-8 jest , a nie ograniczone do użycia tylko w XML.

What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text to dobry artykuł, który daje dobry przegląd tematu.

2

Dokumenty XML mogą zawierać znaki inne niż ASCII, takie jak norweski æ ø å lub francuski ê è é. Aby uniknąć błędów, ustaw kodowanie lub zapisz plik XML jako kod Unicode.

XML Encoding Rules

1

Gdy dane są przechowywane lub przekazywane, są to tylko bajty. Te bajty wymagają pewnej interpretacji. Użytkownicy z nieangielskimi regionami mieli problemy z postaciami, które pojawiły się tylko w swoich ustawieniach narodowych. Znaki te były wyświetlane w niewłaściwy sposób często.

Dzięki XMLowi, który ma informacje, jak interpretować bajty, może być wyświetlany w prawidłowy sposób.

+3

Należy pamiętać, że sam angielski również miał problemy. [ASCII] (http://cstheory.stackexchange.com/questions/2066/difference-between-np-hard-and-np-complete) i [EBCDIC] (http://en.wikipedia.org/wiki/Extended_Binary_Coded_Decimal_Interchange_Code) na przykład użyj zupełnie innych kodowań, nawet dla "normalnych" angielskich znaków. Kodowanie to nie tylko "reszta świata" ;-) –

+2

@ Joachim: Zgadzam się. Hiper-konserwatywne i reakcyjne pojęcie, że ASCII było wystarczająco dobre dla naszych dziadków, więc powinno być wystarczająco dobre dla nas jest śmiesznie krótkowzroczne - i fałszywe. Ale strasznie powszechne. – tchrist

4

Kiedy komputery były tworzone po raz pierwszy, działały tylko z postaciami znanymi z języka angielskiego, co prowadziło do 7-bitowego standardu US-ASCII.

Jednak istnieje wiele różnych języków pisanych na świecie i trzeba znaleźć sposoby, aby móc je wykorzystać w komputerach.

Pierwszy sposób działa dobrze, jeśli ograniczysz się do określonego języka, użyje kodowania specyficznego dla kultury, takiego jak ISO-8859-1, który jest w stanie reprezentować 8-bitowe znaki języka europejskiego w języku łacińskim, lub GB2312 dla chińskich znaków.

Drugi sposób jest nieco bardziej skomplikowany, ale pozwala teoretycznie przedstawić każdą postać na świecie, to standard Unicode, w którym każda postać z każdego języka ma określony kod. Jednak ze względu na dużą liczbę istniejących znaków (109 000 w kodzie Unicode 5) znaki Unicode są zwykle reprezentowane za pomocą reprezentacji trzech bajtów (jeden bajt dla płaszczyzny Unicode i dwa bajty dla kodu postaci:

Aby zmaksymalizować zgodność z istniejącym kodem (niektóre wciąż używają tekstu w ASCII), kodowanie standardowe UTF-8 zostało opracowane jako sposób przechowywania znaków Unicode, wykorzystując jedynie minimalną ilość miejsca, jak opisano w odpowiedzi Joachima Sauera.

Dlatego często można zobaczyć pliki zakodowane przy użyciu określonych zestawów znaków, takich jak ISO-8859-1, jeśli plik ma być edytowany lub tylko do odczytu przez oprogramowanie (i osoby) rozumiejące tylko te języki, a kodowanie UTF-8, gdy istnieje potrzeba wysokiej interoperacyjności i niezależności kulturowej. Obecna tendencja dotyczy zastępowania innych zestawów znaków przez UTF-8, mimo że wymaga to pracy twórców oprogramowania, ponieważ łańcuchy UTF-8 są bardziej skomplikowane w obsłudze niż łańcuchy znaków o stałej szerokości.

+1

Unicode jest również potrzebny w bardziej wyszukanych rodzajach znaków interpunkcyjnych i symbolach, takich jak '¢ € €' i "kręcone cytaty" i podobne. Nie musi być znacznie trudniej pracować z Unicode, jeśli język programowania zaczyna się od Unicode jako podstawowego zestawu znaków; wtedy nie musisz się martwić o kodowanie o zmiennej szerokości - lub nie powinno. – tchrist