Klucz dostępu n przeskakuje w nawigacji strony. Przejdź do początku.

Ten dokument jest tłumaczeniem. W przypadku rozbieżności i błędów aktualna wersja angielska powinna być uznana za autorytatywną. Pierwotne prawa autorskie należą do W3C jak wykazano poniżej.

Tłumacz: M. Kadubiec

s_gotoW3cHome Internacjonalizacja
 

Kodowanie znaków dla początkujących

Potencjalni odbiorcy: Autorzy treści, użytkownicy, każdy kto nie wie czym jest kodowanie znaków a chciałby znać wpływ kodowania na strony internetowe.

Uwaga: Wprowadzono zmiany do oryginalnej wersji angielskiej od czasu wykonania tłumaczenia. Dostępna lista zmian.

Pytania

Co to jest kodowanie i dlaczego jest ważne?

Odpowiedź

Po pierwsze, dlaczego jest ważne

Jeśli stosuje się znaki inne niż znaki podstawowe np.: języka angielskiego czy polskiego, czytelnicy mogą nie odczytać takiego tekstu, chyba że sprecyzuje się jakie kodowanie zostało zastosowane.

Na przykład, zamierzeniem jest, żeby tekst wyglądał następująco:

mojibake1.gif

jednak może się on wyświetlać w taki sposób:

mojibake2.gif

Niewłaściwe kodowanie może nie tylko pogorszyć czytelność tekstu ale również sprawić, że tekst nie będzie znajdowany przez wyszukiwarki lub będzie przetwarzany w inny sposób.

Co to jest kodowanie znaków?

Wyrazy i zdania w tekście tworzy się za pomocą znaków. Przykładami znaków są litery łacińskie á, chińskie ideografy lub znaki Dewanagari .

Możesz nie widzieć niektórych znaków na tej stronie, ponieważ nie masz zainstalowanych odpowiednich czcionek. Jeśli klikniesz w miejscu gdzie powinien być znak, odnośnik zabierze cię do wersji graficznej. Obecna strona posiada kodowanie UTF-8.

Znaki grupowane są w zbiory znaków, które określa się mianem zbioru kodów znaków, ponieważ każdy znak otrzymuje swój numeryczny identyfikator, który w komputerze jest przedstawiony w postaci bajtów.

Oznacza to, że wszystkie znaki są przechowywane w formie kodu, podobnie jak w szyfrach szpiegowskich. Kodowanie znaków jest kluczem do kodu. Jest zbiorem określającym powiązania pomiędzy bajtami reprezentującymi numery w komputerze i znakami w zbiorze kodów znaków. Bez klucza dane wyglądają nieciekawie.

Często używa się błędnego terminu 'charset' do określania tego co w rzeczywistości jest kodowaniem znaków. Należy wiedzieć, że taki termin istnieje, ale lepiej używać terminu 'kodowanie znaków'.

Niestety istnieje wiele zbiorów znaków i kodowań znaków, jak również wiele różnych sposobów łączenia bajtów, numerów i znaków. Poniższy artykuł przedstawia więcej szczegółów dla zainteresowanych.

Na przykład, w zbiorze kodów znaków określanym ISO 8859-1 (lub Latin1) wartość dziesiętna dla litery é wynosi 233. W zbiorze ISO 8859-5, ta sama wartość wyraża znak щ w cyrylicy. Zbiory te zawierają poniżej 256 znaków i łączą kody bezpośrednio z wartościami bajtów. Kod z wartością 233 występuję w postaci jednego bajta o wartości 233. Bajt ten może jednak wyrażać é lub щ, w zależności od kontekstu.

Istnieją również inne sposoby postępowania ze znakami. Na przykład, w zbiorze Unicode można wyrazić oba te znaki w jednym zbiorze. Unicode zawiera wiekszość znaków, które możesz potrzebować. Wartość 233 dalej przedstawia é, ale znak щ cyrylicy ma wartość 1097. Jest to zbyt wielka liczba aby mogła być przedstawiona w jednym bajcie*. Jeśli używasz kodowania UTF-8, щ jest reprezentowane dwoma bajtami, ale wartość kodu nie jest wartością dwóch bajtów połączonych ze sobą - potrzebne jest bardziej skomplikowane dekodowanie. Inne znaki Unicode przedstawione są jednym, trzema, lub czterema bajtami w UTF-8.

UTF-8 jest najpowrzechniejszym kodowaniem stosowanym na stronach internetowych, ale jedynie jednym z kodowań Unicode. Innymi słowy, pojedyńczy kod znaku w zbiorze Unicode może odzwierciedlać różnego typu sekwencje bajtów, w zależności od zastosowanego kodowania w danym dokumencie. Kody Unicode mogą odnosić się do kodowania UTF-8, UTF-16 lub UTF-32. Znak dewanagari z kodem 2325 (915 w zapisie szesnastkowym) przedstawiony jest dwoma bajtami w kodowaniu UTF-16 (09 15), trzema bajtami w UTF-8 (E0 A4 95) i czterema bajtami w UTF-32 (00 00 09 15).

* Obecnie większość bajtów składa się z 8 bitów. Istnieją jedynie dwa sposoby 28 (tz. 256) łączenia 8 bitów.

Kody numeryczne są często wyrażane w systemie szesnastkowym - podstawa 16, np.: 233 w formie szesnastkowej to E9. Wartości kodów Unicode są najczęściej zapisywane w formie U+00E9.

Moga pojawic się dalsze komplikacje poza opisanymi powyżej (np.: kolejność bajtów i sekwencje łamań), ale przedstawione szczegóły pokazują dlaczego ważnym jest aby aplikacja na której się pracuje wiedziała jakie kodowanie znaków jest najlepsze dla konkretnych danych i jak obsługiwać dane kodowanie.

W większości przypadków nie będziesz musiał poznawać tych wszystkich szczegółów. Będziesz natomiast musiał zapoznać się z sekcją Jaki to ma wpływ na mnie? , która znajduje sie poniżej.

Jak się do tego maja czcionki?

Czcionki są zbiorem definicji symboli, tz. definicjami kształtów poszczególnych znaków.

Kiedy aplikacja rozpoznaje rodzaje znaków, wyszukuje ona ich symbole graficzne aby móc je odpowiednio przedstawić na ekranie lub w druku. (Oczywiście, jeśli kodowanie było niewłaściwe, odszuka ona symbole niewłaściwych czcionek.)

Rodzaj czcionki zazwyczaj przedstawia pojedynczy zbiór znaków lub, w przypadku zbioru tak dużego jak Unicode, podzbiór kodów znaków. Jeśli rodzaj czcionki nie posiada symbolu dla konkretnego znaku, niektóre aplikacje będą poszukiwać brakującego znaku w innych rodzajach czcionek systemu na którym pracujesz (oznacza to, że symbol może byc w innym stylu niż otaczające go symbole). W przeciwnym razie pojawi sie jedynie mały kwadracik lub inny znak. Na przykład:

mojibake3.gif

Jaki to ma wpływ na mnie?

Jako autor treści lub deweloper, powinieneś wybrać najlepsze kodowanie znaków dla treści witryny lub danych na niej zawartych. Kodowanie Unicode jest najczęściej bardzo dobrym wyborem, ponieważ używa pojedynczego kodu dla większości istniejących znaków, co ułatwia nam pracę. Stosowanie systemu Unicode eliminuje śledzenie używanych kodów znaków oraz niezbędne zmiany kodowania .

Twórcy stron internetowych powinni wiedzieć w jakim kodzie zapisuje znaki ich edytor oraz jak zapisać tekst w innym kodzie. Proszę pamiętać, że deklaracja innego kodowania nie zmieni liczby bajtów, dlatego należy zapisać tekst w danym kodowaniu.

Autorzy stron powinni wiedzieć jak deklarować kodowanie znaków zastosowanych w danym formacie dokumentu. Powinno się również sprawdzić czy serwer podaje dokumenty z właściwą deklaracją nagłówka HTTP.

Deweloperzy powinni stworzyć stytuację, w której wszystkie części systemu komunikują sie między sobą, wiedząc jakie kodowanie jest stosowane i posiadając wsparcie dla wszsytkich kodowań i znaków.

Poniższe linki prowadzą do dalszych artykułów na w/w tematy.

Dodadkowe informacje

The article Character encodings: Essential concepts is worth a read at this point, as it provides some gentle introductions to related topics, such as Unicode, UTF-8, Character sets, coded character sets, and encodings, the document character set, character escapes and the HTTP header.

Powiedz nam co myślisz (po angielsku).

Prenumeruj kanał RSS.

Nowe źródła

Wiadomość ze strony głównej

Twitter (Wiadomość ze strony głównej)

‎@webi18n

Warto przeczytać

Autor: Richard Ishida, W3C. Tłumacz: M. Kadubiec.

Ważny XHTML 1.0!
Ważne CSS!
Zakodowano w UTF-8!

Angielska wersja dokumentu z dnia 2008-01-31. Tłumaczenie wykonano dnia 2008-06-18 20:06 GMT

Historia zmian dokumentu qa-what-is-encoding w blogu i18n.