Что происходит, когда мы не указываем <meta charset=utf-8> ?

Что произойдет, если мы не укажем <meta charset="utf-8">? в HEAD документа HTML?

Ответ 1

Независимо от того, присутствует ли такой meta или нет, браузеры и пользовательские агенты сначала будут искать заголовки HTTP, чтобы найти там информацию кодирования. Фактически, они будут еще до того, как будут соблюдаться пользовательские настройки и будут обмениваться данными спецификации, как описано в разделе 8.2.2.1. Определение кодировки символов в HTML5 CR - в этой проблеме описывается реальность, а не только предлагаемая норма.

Поэтому ответ действительно "зависит". Во многих случаях meta игнорируется, поэтому его отсутствие не действует, за исключением, возможно, ситуаций, когда документ HTML сохраняется локально (так что заголовки HTTP теряются). Во многих других случаях он не игнорируется, но если он опускается, браузеры все равно будут вызывать правильную кодировку. И в некоторых случаях, когда тег является единственной вещью, которая заставляет браузер использовать правильную кодировку, ее отсутствие приведет к неправильной интерпретации данных, как правило, так, что байты интерпретируются в кодировке windows-1252. Это зависит от фактического содержания.

Ответ 2

Что произойдет, если мы не укажем <meta charset="utf-8">? в HEAD документа HTML?

Пользовательский агент ищет HTTP-заголовок ответа Content-Type, отправленный с сервера:

Content-Type: text/html; charset=utf-8

И если заголовок Content-Type не указывает charset в зависимости от User Agent могут произойти разные вещи. Некоторые пользовательские агенты могут попытаться использовать эвристику, чтобы угадать правильную кодировку, проанализировав некоторые из байтов из потока ответов, ища известные кодировки. И если это не удается, вы можете получить пару вопросительных знаков или странных символов на своей веб-странице в том месте, где вы использовали символы вне диапазона ASCII.

Ответ 4

для таких символов, как:
↑→↓←

они будут показывать:
â†'â†â†"â†

если вы не используете формат UTF-8:
<meta charset="UTF-8">