Windows-1250 na českém webu: kdo za to opravdu může
Nemohly weby. Ve všech 80 zkontrolovaných homepage jsem nenašel jedinou, která by posílala jiné kódování, než sama deklaruje. Problém byl v nástroji, který tu deklaraci ignoroval — a byl to můj.
Vzniklo to při minulém měření, kde mi skript nahlásil, že dvěma zpravodajským webům chybí v HTML hlavní text. Nechyběl — servery posílají stránku ve windows-1250 a já ji dekódoval jako UTF-8. Text se rozsypal na otazníky a porovnání selhalo.
| Zjištění | Počet z 80 |
|---|---|
| posílá jiné kódování, než deklaruje | 0 |
| posílá windows-1250 místo UTF-8 | 5 |
| deklaruje kódování v hlavičce HTTP | 79 |
deklaruje kódování značkou meta v HTML | 80 |
hlavička a značka meta si odporují | 0 |
má značku meta až za 1024 bajty | 3 |
Jak poznám problém za minutu
Stáhněte si hlavičky vlastního webu:
curl -sSI https://vasweb.cz/ | grep -i content-type
Podle výsledku nastanou tři situace:
| Co uvidíte | Co to znamená |
|---|---|
content-type: text/html; charset=utf-8 a stejná hodnota i v meta | v pořádku |
v hlavičce charset chybí, ve zdroji stránky značka meta je | funguje, ale spoléháte na jedno místo — doplňte hlavičku |
hlavička říká jedno a značka meta druhé | chyba — typicky pozůstatek migrace, opravit |
Ve vzorku měla rozpor nula domén, takže ta třetí situace je vzácná. Vzniká hlavně při stěhování webu nebo výměně šablony, kdy se změní jedno místo a druhé zůstane.
Když web provozujete
- Deklarujte na obou místech hlavička i značka meta. Když jedno vypadne při úpravě, druhé zachrání situaci.
- Značku meta dejte hned na začátek specifikace počítá s prvními 1024 bajty dokumentu, ne až za blokem skriptů.
- windows-1250 samo o sobě nebylo v měření chybou když ho správně deklarujete, korektní klient si poradí. Při plánované migraci je ale UTF-8 dnes jednodušší volba.
- Po každé migraci zkontrolujte znovu změna serveru nebo šablony je nejčastější příležitost, jak se deklarace rozejde s obsahem.
Proč problém nevznikl na webech
Kódování se deklaruje na dvou místech a mají pořadí:
- Hlavička
Content-Type, kterou vrací server:text/html; charset=utf-8. Je bezpečné řídit se nejdřív jí. - Značka
metav HTML:<meta charset="utf-8">. Použije se, když hlavičkacharsetneuvádí. Specifikace zároveň žádá, aby byla brzy v dokumentu — typicky v prvních 1024 bajtech.
Ve vzorku má hlavičku 79 domén z 80, značku meta má všech 80. Ta jedna doména bez hlavičky má značku na 368. bajtu, takže žádný čtenář nezůstane bez informace.
Tři weby mají značku meta až za hranicí 1024 bajtů — na pozicích 1153, 2225 a 2225. Všechny tři zároveň posílají charset i v hlavičce. Medián pozice napříč vzorkem je 101 bajtů; drtivá většina to má hned nahoře.
Co tohle měření neříká
- Nic o celém českém webu. Vzorek není náhodný: 33 médií je ruční seznam, 47 e-shopů je z jedné platformy. Je to obrázek téhle osmdesátky.
- Nic o podstránkách. Měřil jsem jen homepage; u velkých webů běží různé sekce často na různých systémech.
- Nic o chování AI robotů. Netestoval jsem, co s kódováním udělá GPTBot nebo kterýkoli jiný. Vím jen, co udělá špatně napsaný nástroj — protože jsem ho napsal.
- Nezachytí jemné případy. Všech 80 homepage má českou diakritiku, takže hrubé chybné dekódování bylo na čem poznat. Jiné typy problémů tahle kontrola neodhalí.
Jeden odečet, 13. srpna 2026.
Tři chyby okolo kódování
Dekódovat natvrdo UTF-8
Projde to na většině webů a selže na menšině. Právě proto se to hledá špatně — nevypadá to jako chyba čtení, ale jako chybějící obsah.
Číst značku meta a ignorovat hlavičku
Bezpečné pořadí je opačné. Když si obě místa odporují, čtete to špatně.
Dát meta charset až za blok skriptů
Specifikace počítá s prvními 1024 bajty. Tři weby ve vzorku to mají dál; zároveň posílají charset i v hlavičce.
Shrnutí
Pět z osmdesáti českých homepage posílá stránku ve windows-1250 a všech pět to správně deklaruje. Rozpor mezi deklarací a obsahem jsem nenašel ani jednou.
Kdo provozuje web, má minutovou kontrolu výš. Kdo píše nástroj, který stahuje cizí stránky, má v něm respektovat deklarované kódování — jinak si vyrobí nálezy, které vypadají jako chyby cizích webů. Přesně to se povedlo mně.