Почему необходимо указывать кодировку символов в документе HTML5, если кодировка символов по умолчанию для HTML5 - UTF-8? - PullRequest
0 голосов
/ 16 сентября 2018

У меня следующий HTML5 документ:

<!DOCTYPE html>
<html>
    <head> </head>
    <body>
        <p>Beträge: 20€</p>
    </body>
</html>

Вывод вышеприведенного кода выглядит следующим образом:

Beträge: 20€

Я попробовал ниже HTML5 код:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
        <p>Beträge: 20€</p>
    </body>
</html>

Приведенный выше код дал мне следующий вывод, как я ожидал:

Beträge: 20€

Насколько мне известно, кодировка символов по умолчанию для HTML5 - это UTF-8 .По умолчанию это означает, что он не должен быть указан явно внутри тега <meta>.

Итак, в своем первом фрагменте кода я пропустил код <meta charset="UTF-8"> Но я получил какой-то странный неожиданный результат.

Затем я попытался добавить код <meta charset="UTF-8"> между <head>пару тегов, и он работал отлично, и я получил ожидаемый результат.

Итак, мой вопрос, так как кодировка символов по умолчанию в HTML5 была установлена ​​на UTF-8 почему он не работает, если он не был указан явно?

Почему необходимо указывать кодировку символов "UTF-8" в HTML5 документе

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Поскольку выражение «кодировка символов по умолчанию для HTML5 - это UTF-8» - неправильно .Заявление распространяется на веб-сайтах , например .Но, как пишет Марсель Допита на Не дайте себя одурачить w3schools, UTF-8 не является кодировкой HTML5 по умолчанию , это неверно и на самом деле рекомендация W3C имеет "рекомендуемое значение по умолчанию"кодировка "Windows-1252 для английских локалей.

Иногда утверждается, что" HTTP / 1.1 по умолчанию ISO-8859-1 ".Это было верно в стандарте 1999 года (RFC 2616), но в версии 2014 года (RFC 7230-7329) кодировка по умолчанию была удалена , и поэтому поведение по умолчанию теперь просто определяется рекомендацией HTML5.Кроме того, даже если транспортный уровень действительно указывает «iso-8859-1», это не поддерживаемая кодировка в HTML5, а спецификация кодирования говорит, что его следует рассматривать как метку дляWindows-1252.

0 голосов
/ 17 сентября 2018

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.Проверщики соответствия могут посоветовать авторам не использовать устаревшие кодировки.

...