Nie, nie jest to możliwe z poziomu HTML. Nagłówek odpowiedzi serwerów ma pierwszeństwo przed metatagiem dokumentu. Jak określono w 5.2.2 Określanie kodowania znaków - Specyfikacja HTML 4.01 :
Podsumowując, zgodne programy użytkownika muszą przestrzegać następujących priorytetów podczas określania kodowania znaków dokumentu (od najwyższego priorytetu do najniższego):
- Parametr „charset” HTTP w polu „Content-Type”.
- Deklaracja META z „http-equiv” ustawioną na „Content-Type” i wartością ustawioną dla „charset”.
- Atrybut charset ustawiony na elemencie, który wyznacza zasób zewnętrzny.
Wymaga to więc konfiguracji po stronie serwera. Jednak w miarę kontynuowania rozdziału:
Programy klienckie mogą zapewniać mechanizm, który pozwala użytkownikom zastępować nieprawidłowe informacje o „zestawie znaków”. Jeśli jednak klient użytkownika oferuje taki mechanizm, powinien oferować go tylko do przeglądania, a nie do edycji, aby uniknąć tworzenia stron internetowych oznaczonych niepoprawnym parametrem „charset”.
W moim przypadku nagłówek Content-Type serwera zawiera właściwy typ MIME, ale zły zestaw znaków .
Jak się okazało, moja konfiguracja Apache httpd ustawiła AddDefaultCharset
włączenie, które dodawało ; charset=ISO-8859-1
część. Umieszczenie w katalogu głównym stron internetowych .htaccess
następującej linii:
AddDefaultCharset Off
informacje o zestawie znaków zostały usunięte:
$ curl -I http://example.com/file.html
HTTP/1.1 200 OK
Date: Fri, 19 Oct 2012 15:07:52 GMT
...
Content-Type: text/html
(patrz ostatni wiersz, bez ; charset=...
części). To w połączeniu z metatagiem HTML powoduje, że wspomniana heurystyka przeglądarki przejmuje zestaw znaków od metatagu. Strona internetowa jest poprawnie odkodowana.
Testowane z:
- Google Chrome wer. 22.0.1229.94
- Firefox v. 16.0.1
- Wersja Lynx 2.8.7rel.1 (05 lipca 2009 r.)
Te trzy przeglądarki miały problemy z oryginalną konfiguracją i działają teraz (wszystkie na Fedorze 17).
- Opera 12.02
- Internet Explorer 6 (Win XP SP3)
Po pierwsze, nie miałem problemu. Obaj woleli UTF-8 od metatagu niż ustawienie ISO-8859-1 z serwera.
Nie obsługuje UTF-8, dlatego zawsze wybiera Western (Latin1) bez względu na ustawienia serwera i metatag.