HTTP1.1 указывает , что браузеры должны обрабатывать весь текст как ISO-8859-1, если не указано иное:
Когда явный параметр charset не предоставленотправитель, медиа подтипы типа «текст» определены как имеющие значение кодировки по умолчанию «ISO-8859-1»
В то же время, HTML5 указывает, что
Если транспортный уровень задает кодировку и поддерживается, верните эту кодировку с определенной достоверностью и прервите эти шаги.
Итак, HTTP1.1 по умолчанию соответствует ISO-8859-1,и переопределяет все остальное.
Если вы кодируете
Beträge: 20€
с помощью UTF-8, а затем декодируете его как ISO-8859-1, вы получите именно искаженный вывод:
Beträge: 20â¬
, как показано в следующем фрагменте кода (Java на самом деле не имеет значения):
new String("Beträge: 20€".getBytes("utf-8"), "iso-8859-1")
// result: Beträge: 20â¬
Браузер действительно предупреждает вас об этом.Например, Firefox отображает в консоли следующее предупреждение:
Кодировка символов документа HTML не была объявлена.Документ будет отображаться с искаженным текстом в некоторых конфигурациях браузера, если документ содержит символы вне диапазона US-ASCII.Кодировка символов страницы должна быть объявлена в документе или в протоколе передачи.
Для получения правильного вывода необходимо вручную переопределить ISO-8859-1 с помощью UTF-8 (вв случае с Firefox он находится под View
-> Text Encoding
-> Unicode
(вместо "Western
")).
Итак, сделаем вывод: я не вижу, гдев нем даже говорится, что "кодировка символов по умолчанию для HTML5 - UTF-8" .Все, что он говорит, кажется:
Авторам рекомендуется использовать UTF-8.Проверщики соответствия могут посоветовать авторам не использовать устаревшие кодировки.