JustPaste.it

Kodowanie

Deklaracja a kodowanie

Uzyskanie poprawnych znaków na stronie WWW wymaga dwóch rzeczy: zadeklarowania użytego zestawu i użycia znaków w tym zestawie. Oczywiście oznacza to, że sama deklaracja (np. znacznik <meta>) nie wystarczy, podobnie jak jedynie użycie konwertera to za mało.

Kodowanie znaków

ISO-8859-2 vs. Windows-1250

W dokumentach pisanych w języku polskim powinno się stosować kodowanie UTF-8 lub ISO-8859-2. Są to międzynarodowe standardy, a ten drugi przyjęty także w charakterze Polskiej Normy. Większość systemów operacyjnych/przeglądarek radzi sobie z nimi bez problemu.

Kodowanie Windows-1250 jest wewnętrznym systemem kodowania, stosowanym w starszych programach firmy Microsoft. Kodowanie to jest niezgodne z normami ASCII - polskie znaki Microsoft umieścił w obszarze zarezerwowanym dla kodów specjalnych (escape codes), dlatego pliki kodowane w Windows-1250 przez niektóre programy słusznie są uznawane za binarne, a nie tekstowe.

Objawem użycia znaków Windows-1250 zamiast ISO-8859-2 jest pojawianie się "1" zamiast "ą" oraz kwadracika zamiast "ś". Jeśli kodowanie jest całkiem źle zadeklarowane, to znak "3" widoczny jest zamiast "ł".

Unicode

Unicode jest zestawem znaków, który w zamierzeniu ma obejmować wszystkie rodzaje znaków stosowanych w piśmie. Kodowania Unicode znoszą ograniczenie do jednego zestawu znaków w dokumencie.

Unicode przypisuje unikalny numer każdemu znakowi (tzw. code point, wykraczający poza dotychczasowy limit 255), niezależny od używanej platformy, programu czy języka. Dlatego dla dokumentów zawierających znaki z różnych języków, Unicode jest najlepszym rozwiązaniem.

Tekst Unicode można zapisać na kilka sposobów. Wewnętrznie używany przez Windows to UTF-16, podwajający (względem ASCII) objętość każdego tekstu.

Na sieci lepiej użyć oszczędniejszej i bardzej kompatybilnej alternatywy - UTF-8. To kodowanie zapisuje podstawowe znaki jako pojedyncze bajty, a znaki specjalne (w tym polskie) uzyskuje z kombinacji kilku bajtów. Tekst w języku polskim zwiększa swoją objętość o ok. 5%, ale za to nie ma potrzeby stosowania encji do znaków specjalnych jak np. "&nbsp;" i "&mdash;"

Unikod bardzo ułatwia zapisywanie najróżniejszych znaków, ale jest kilka problemów, których trzeba być świadomym.

Narzędzia Microsoftu, w tym Notepad, dla rozpoznania pliku kodowanego UTF-8 dopisują na początku niewidzialny znak BOM. Znak ten uniemożliwia wysłanie cookies i własnych nagłówków z PHP4, nawet przy włączonym buforowaniu wyjścia.

Znak ten uniemożliwia niektórym przeglądarkom rozpoznanie DOCTYPE dokumentu przełączając je w tzw. Quirks Mode.

W niektórych przeglądarkach BOM może być widoczny jako "ďťż".

Pliki UTF-8, bez znaku BOM, dobrze działają z większością przeglądarek (nawet tak archaicznych jak Netscape 4) i robotów sieciowych.

Prawidłowe pliki UTF tworzy np. Notepad2. Większość linuksowych edytorów tekstu również prawidłowo obsługuje Unicode.

Deklaracja

Tag meta

Deklarację użytego zestawu znaków powinno się wysyłać bezpośrednio w nagłówkach serwera (poza dokumentem), ale najczęściej autorzy stron nie mają takiej możliwości. Z tego powodu powstał tag <meta>.

Deklarację należy umieścić w sekcji <head>. Dla kodowania ISO wygląda tak:

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2">

meta http-equiv jest sposobem uzupełnienia nagłówków HTTP, które serwer powinien przesłać przed wysłaniem dokumentu HTML. Nagłówek Content-Type określa typ dokumentu, tu text/html. charset=ISO-8859-2 jest parametrem typu dokumentu i określa zestaw użytych znaków.

Nagłówki HTTP

Zamiast posługiwać się półśrodkiem, jakim jest <meta>, można wysłać kodowanie w nagłówkach HTTP. Wymaga to dostępu do konfiguracji serwera albo generowania dokumentów przez skrypt po stronie serwera.

Apache

Za pomocą dyrektywy AddDefaultCharset w plikach konfiguracyjnych, w tym również .htaccess.

AddDefaultCharset iso-8859-2
PHP

W PHP jest funkcja header() wysyłająca nagłówki HTTP.

<?php header("Content-Type: text/html; charset=ISO-8859-2"); ?>

Taka deklaracja zastępuje tag <meta>.

JSP

W JavaServer Pages (nie myl z apletami Java ani JavaScript) kodowanie ustawia się następująco:

<%@ page contentType="text/html" pageEncoding="UTF-8" %>

Kodowanie serwera i kodowanie dokumentu

Jedną z częstszych przyczyn krzaków na stronach internetowych jest konflikt między kodowaniem ustawionym przez serwer i kodowaniem zastosowanym przy pisaniu dokumentów. Jeśli kodowanie serwera ustawione jest np. na iso-8859-1, to nie zobaczymy polskich znaków diakrytycznych na swojej stronie, mimo tego, że w dokumencie znaki są poprawnie zakodowane i w nagłówku umieszczony został tag <meta>. Kodowanie ustawione przez serwer ma największy priorytet.

Jak przekonwertować dokumenty?

Gdy pisze się dokumenty pod Windows, szczególnie w notatniku (co odradzamy na rzecz bardziej rozwiniętych edytorów tekstu), niezbędne jest przekodowanie dokumentów na standard ISO.

Na rynku dostępnych jest wiele narzędzi służących do konwersji tekstu z jednej strony kodowej na inną. Jednym z lepszych jest Gżegżółka. Jest to bardzo rozbudowany program, obsługujący większość standardów kodowania stosowanych na całym świecie.

 

Źródło: http://osiolki.net/faq/kodowanie