‹Мета-кодировка = utf-8› vs ‹мета-кодировка http-экв = Content-Type›

Какую нотацию мне следует использовать, чтобы определить кодировку для HTML5 Doctype?

  1. Короткий:

    <meta charset="utf-8" /> 
    
  2. Длинный:

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    

person CuriousMind    schedule 14.01.2011    source источник
comment
Использование тега ‹meta› для чего-то вроде типа содержимого и кодирования в высшей степени иронично, поскольку, не зная этих вещей, вы не смогли бы проанализировать файл, чтобы получить значение метатега.   -  person Mark    schedule 15.01.2011
comment
Вы можете анализировать его как ASCII, пока не дойдете до него. Алгоритм синтаксического анализа HTML5 учитывает это.   -  person Quentin    schedule 15.01.2011
comment
Следует отметить, что ни один из них не используется для анализа, когда страница обслуживается через Интернет. Вместо этого будет использоваться заголовок HTTP Content-Type. Метатег используется только тогда, когда страница загружается из файловой системы локального диска.   -  person BalusC    schedule 15.01.2011
comment
Элемент meta используется через HTTP при определенных условиях (включая отсутствие данных в заголовке HTTP).   -  person Quentin    schedule 15.01.2011
comment
Если ваши HTML-файлы предназначены для электронных книг Kindle, вам потребуется http-equiv версия.   -  person    schedule 05.11.2012
comment
Также парадоксально то, что он назван набором символов, хотя на самом деле он предназначен для указания кодировки. (кодировка - Unicode, кодировка - UTF-8)   -  person Ryan    schedule 20.03.2013
comment
Хотя это не требуется для HTML5, это больше относится к XHTML. Рассмотрите возможность закрытия элементов, т.е. ‹meta .... /›. Избегает множества предупреждений в некоторых редакторах для элементов, которые не являются элементами Void (‹BR› и т. Д.).   -  person Rob Von Nesselrode    schedule 17.05.2013
comment
@Quentin: А если по какой-то странной причине вы захотите закодировать свою страницу в UTF-16 или UTF-32? Я согласен с Марком, идея использования закодированных данных для описания собственной кодировки глупая, хотя здесь мы обычно можем обойтись без нее. Но я думаю, что это частично потому, что у сервера в конечном итоге будет такая же проблема, если только у сервера нет других средств идентификации / принудительного кодирования.   -  person lyngvi    schedule 16.10.2013
comment
Использование длинного объявления для XHTML 1.0 strict работает должным образом.   -  person RealDeal_EE'18    schedule 26.11.2013
comment
Лучше всего, чтобы метатег кодировки был первым тегом в заголовке на joelonsoftware.com/articles /Unicode.html и code.google.com/p/doctype -mirror / wiki / MetaCharsetAttribute. По сути, он должен появиться в первых 512 байтах как можно раньше, тогда документ будет проанализирован с правильной кодировкой.   -  person BF4    schedule 07.12.2013
comment
@ Квентин. Вот почему требуется, чтобы элемент типа содержимого находился в пределах первых 100 байтов документа.   -  person jackvsworld    schedule 01.02.2014
comment
начиная с php 5.4.22 DOMDocument не получает длинный :(   -  person Timo Huovinen    schedule 13.03.2014
comment
Есть ли вред в указании обоих Content-Type: text / html; charset = utf-8 в качестве заголовка HTTP и имеет метатег на странице (например: ‹meta charset = utf-8 /›)? Я не знаю, добавляет ли моя хостинговая компания заголовок HTTP, чтобы указать UTF-8, и у меня есть метатег на моих страницах. Не знал, были ли проблемы с обоими   -  person    schedule 12.08.2015
comment
Наилучшим решением было бы фактически игнорировать все эти заголовки, бессмыслицу с метатегами и использовать спецификацию Unicode. Спецификация Unicode стандартизирована на самом низком возможном уровне, сама спецификация Unicode и поэтому должна работать везде, а не только в (X) HTML или через HTTP. Он будет работать для скриптов, таблиц стилей, текстовых / простых документов, через HTTP, TCP, почту, вы называете это. Единственная проблема в том, что какое-то устаревшее программное обеспечение задыхается от спецификации ... Но ... Если мы все просто начнем его использовать, мы заставим поставщиков исправить это.   -  person Stijn de Witt    schedule 18.12.2015
comment
@StijndeWitt: И как именно Unicode BOM поможет вам, если вам нужно поддерживать другие кодировки, такие как ISO-XXX или японские кодировки? Кроме того, хотя спецификация стандартизирована, стандарт фактически не рекомендует использовать спецификацию с UTF-8; см. например ответ на Чем отличается UTF-8 от UTF-8 без спецификации?.   -  person sleske    schedule 30.08.2016
comment
@sleske Я думаю, что в то время, когда авторы стандарта писали этот часто задаваемый вопрос, авторы стандарта чувствовали, что использование UTF-8 без спецификации даст наилучшее взаимодействие со старым программным обеспечением, поскольку оно будет соответствовать ASCII. Но сейчас прошло более десяти лет, и поддержка UTF8 практически повсеместна. Я поддерживаю свой комментарий о том, что спецификация - лучшее место для хранения кодировки, потому что она сохраняется в сети, файловых системах и даже базах данных. Я все еще добавляю заголовки HTTP и даже метатег.   -  person Stijn de Witt    schedule 01.09.2016
comment
utf-8 не имеет спецификации: поскольку существует только один порядок байтов (нет большого / маленького конца); потому что ascii - это utf-8, а спецификация - не ascii. Это приведет к поломке страниц с форматом ascii. Некоторые системы используют ascii / utf-8, и добавление бомбы приведет к поломке некоторого старого программного обеспечения). Эти системы основаны на старых, чтобы создать очень хорошую и надежную систему, без необходимости устранять старую каждый раз, когда добавляется новая функция.   -  person ctrl-alt-delor    schedule 27.11.2016
comment
UTF-8 имеет спецификацию. Его цель не в том, чтобы определять порядок байтов, но он служит двойной цели, чтобы установить, что используется кодировка UTF-8. UTF-8 может содержать спецификацию. Однако это не имеет значения в отношении порядка байтов байтового потока. UTF-8 всегда имеет один и тот же порядок байтов. Начальная спецификация используется только в качестве подписи - указание на то, что текстовый файл без пометок находится в UTF-8. unicode.org/faq/utf_bom.html#bom5   -  person Stijn de Witt    schedule 02.11.2017
comment
Также обратите внимание, что ASCII является подмножеством UTF-8, но обратное, очевидно, неверно. Поэтому, если ваш текст содержит только ASCII, не включайте спецификацию (делая ее фактически ASCII). Как только ваш текст может содержать символы, отличные от ASCII, обратная совместимость все равно нарушается, и вам следует добавить спецификацию.   -  person Stijn de Witt    schedule 02.11.2017
comment
Одна из причин, по которой HTML-файлы имеют кодировку, хотя предполагается, что http должен указывать кодировку, заключается в том, что большинство пользователей не имеют контроля над своими серверами. Вместо того, чтобы варить океан решения, требующего от каждого сервера каким-либо образом позволять пользователям указывать кодировку для каждого обслуживаемого файла, стало ясно, что пользователям нужен способ указать кодировку в самом файле. Что касается bom в utf-8, тонны программного обеспечения терпят неудачу даже в 2019 году. Независимо от того, есть ли какой-то инженерный идеал, прагматические решения - это кодировка в файле HTML, а для utf-8 никогда не было бомбы для любого файла.   -  person gman    schedule 25.02.2019


Ответы (9)


В HTML5 они эквивалентны. Используйте более короткий, его легче запоминать и печатать. Поддержка браузера прекрасна, поскольку он был разработан для обратной совместимости.

person Quentin    schedule 14.01.2011
comment
А как насчет поддержки браузера? <meta charset='utf-8'> работает в IE6? - person Šime Vidas; 15.01.2011
comment
Вот обновленная ссылка на страницу кода Google, на которой @ Šime Vidas упомянул. В отношении IE 6, 7 и 8 говорится, что в браузерах, отличных от IE, вы можете использовать document.characterSet. В IE вы можете подумать, что можете document.getElementsByTagName ('meta') [0] .charset, но это возвращает только указанную вами кодировку символов, а не кодировку, которую фактически использует IE. - person hotshot309; 05.06.2012
comment
Я знаю, что эта ветка устарела, но gtmetrix.com/specify-a-character- set-early.html указывает, что использование <meta> для установки кодировки символов отключает предварительный загрузчик в IE8, что может повлиять на время загрузки вашей страницы. Да, да, я знаю ... откажитесь от IE8. @ MészárosLajos может вернуться сюда через пару лет и разорить нас за то, что мы все еще поддерживаем IE8. ;-) - person erturne; 05.03.2014
comment
developer.mozilla.org/en-US/docs/Web/ Руководство / HTML / было для меня хорошим подтверждением этого ответа. - person Brendan; 05.02.2015
comment
Сегодня у меня возникла проблема, когда корейские символы не отображались в IE11. Отказ от короткого синтаксиса в пользу более длинного синтаксиса устранил проблему. Я не знаю, связано ли это с какой-то конфигурацией сервера или это проблема с IE11 и кодировкой. Точная комбинация символов, с которой он не справлялась, была 베라. - person James Donnelly; 06.03.2015
comment
Долой старое вместе с новым. Требуйте изменения к лучшему. Проще делать то же самое, и если вы живете в пещере со старыми технологиями ... СЛИШКОМ ПЛОХО! Требуйте изменения к лучшему. - person Chef_Code; 04.08.2015
comment
Я обнаружил, что Chrome предпочитает длинную форму, а Firefox предпочитает короткую форму, и их предпочтения являются взаимоисключающими. Я нашел это с UTF-8 внутри SVG. Длинная форма в документе типа HTML5 не работала в Firefox, а короткая форма в формате документа HTML5 не работала в Chrome, мне пришлось использовать оба, чтобы заставить оба браузера работать. - person derekm; 15.09.2015
comment
И сегодня я наткнулся на электронную таблицу Excel, сгенерированную из шаблона с коротким синтаксисом, который был нарушен, если сгенерирован на сервере Linux, локальная машина Windows справилась хорошо. Изменение фиксированной кодировки длинного синтаксиса в выходном файле - person zakius; 16.10.2015
comment
Почему важен charset в метатеге ?, где он используется? Или в чем преимущество charset в html - person 151291; 12.03.2016
comment
Если есть сомнения, я бы выбрал более простой вариант. Но поскольку люди сообщают о проблемах с каждым вариантом, почему бы просто не использовать оба варианта? - person Rolf; 12.10.2016
comment
Я получил ошибку в последней редакции ff при использовании <meta charset="utf-8">, но не при использовании другого. как? - person Amit Shah; 26.04.2017
comment
@AmitShah - Если у вас есть новый вопрос, задайте его вместо того, чтобы оставлять комментарий. Убедитесь, что вы включили минимальный воспроизводимый пример и упомянули конкретный номер версии вашего браузера. - person Quentin; 26.04.2017
comment
@ Квентин, с чего ты решил, что это новый вопрос? если я опубликую новый вопрос, он будет таким же, как указано выше, и его тоже можно считать дубликатом. мой вопрос прост и противоречит данному ответу. если оба тега одинаковы, то почему один из них выдает предупреждение в FF? и это тоже последний поддерживаемый формат HTML5. и это тоже в последней версии FF для разработчиков. Если это правда, значит, приведенный выше ответ неверен. - person Amit Shah; 26.04.2017
comment
@AmitShah - Потому что у вас есть конкретная проблема с каким-то конкретным кодом. Либо что-то не так с вашим кодом, либо что-то не так с последней версией FF для разработчиков. - person Quentin; 26.04.2017
comment
Используйте более длинный при синтаксическом анализе документа на стороне сервера или обслуживании его для серверов, поскольку они часто устарели. - person Timo Huovinen; 19.04.2018

Обе формы объявления meta charset эквивалентны и должны работать одинаково во всех браузерах. Но есть несколько вещей, которые вам нужно помнить при объявлении набора символов ваших веб-файлов как UTF-8:

  1. Сохраните файлы в кодировке UTF-8 без метка порядка байтов (спецификация).
  2. Объявите кодировку в своих файлах HTML, используя мета-кодировку (как указано выше).
  3. Ваш веб-сервер должен обслуживать ваши файлы, объявляя кодировку UTF-8 в HTTP-заголовке Content-Type.

Серверы Apache по умолчанию настроены для обслуживания файлов в формате ISO-8859-1, поэтому вам нужно добавить следующую строку в ваш .htaccess файл:

AddDefaultCharset UTF-8

Это настроит Apache для обслуживания ваших файлов, объявляющих кодировку UTF-8 в заголовке ответа Content-Type, но ваши файлы должны быть сохранены в UTF-8 (без спецификации) для начала.

Блокнот не может сохранять ваши файлы в UTF-8 без спецификации. Бесплатный редактор, который может это сделать, - это Notepad ++. В строке меню программы выберите «Кодирование> Кодировать в UTF-8 без спецификации». Вы также можете открывать файлы и повторно сохранять их в UTF-8, используя «Кодирование> Преобразовать в UTF-8 без спецификации».

Подробнее о метке порядка байтов (BOM) в Википедии.

person CodeBoy    schedule 21.05.2011
comment
@CodeBoy Я бы изменил ваш ответ, указав, что вы должны сохранять ... без спецификации. На следующей странице говорится ... обычно для обеспечения совместимости лучше всего опускать спецификацию ... указывая на передовой опыт, но не на требование: w3.org/International/questions/qa-byte-order-mark - person Johann; 04.06.2012
comment
В IIS вы можете установить кодировку в заголовках HTTP с помощью ‹globalization fileEncoding = utf-8 responseEncoding = utf-8 /› в Web.Config - добавьте его в ‹system.web› - person Chris Moschini; 20.04.2013
comment
Я просто потратил 30 минут, пытаясь понять, почему ваша подсказка кодировки не работает для меня. Возможно, вам придется переименовать default.html в index.html (или другое имя файла). Кажется, что Apache жестко настроен на определенные значения по умолчанию, когда дело доходит до default.html! - person Ivan Dossev; 30.04.2013
comment
как я понимаю, ВООБЩЕ не имеет значения, если вы сохраните с нашим без спецификации. - person David 天宇 Wong; 23.06.2013
comment
Честно говоря, я всегда предпочел бы простой в настройке веб-сервер чем-то вроде apache. @Dabbu - person dom0; 14.08.2013
comment
Спасибо! Эта информация мне очень пригодится, когда я разрабатываю свой интерактивный редактор кода html / css / js (Liveitor.com). В последний раз, когда я пробовал парсер php (.dll), возникла проблема с обработкой файла в UTF8 с BOM - он выводит байты BOM! Я не понимаю, почему он не может обнаружить спецификацию ... - person Edwin Yip; 18.10.2013
comment
Спецификация действительно имеет значение в определенных контекстах. Это необходимо при работе с UTF-16, поскольку в RFC 2781, раздел 4.3 указана кодировка по умолчанию. является прямым порядком байтов, но поскольку Windows по умолчанию использует прямой порядок байтов, большинство программ также будет использовать LE. Чтобы избежать неправильной интерпретации содержимого, очень удобна спецификация. Это также может быть вредно в определенных условиях, так как при использовании PHP интерпретатор иногда выводит спецификацию и выдает ошибки, когда вы пытаетесь вывести какой-либо заголовок HTTP. Подводя итог: не используйте BOM для UTF-8; не забудьте спецификацию для UTF-16. - person diego nunes; 20.10.2013
comment
Почему вы говорите, что UTF-8 HTML должен быть без спецификации? Наличие спецификации должно работать нормально. Кроме того, вам не нужны meta и HTTP-заголовок. Вам просто нужен один из заголовков BOM, meta или HTTP. - person hsivonen; 28.11.2013
comment
Как заставить Visual Studio перестать быть злом и всегда добавлять спецификацию UTF-8? Для Tomcat вы также должны добавить URIEncoding="utf-8" к каждому соединителю. - person Brett Ryan; 03.03.2014
comment
Вы указываете тип содержимого HTML, почему вы используете для этого мета-кодировку? Я думаю, что это излишне, правда? - person Chao; 26.03.2015
comment
@Richard одна проблема с использованием только заголовка заключается в том, что кодировка будет потеряна, если пользователь сохранит html-файл на диск. Можно использовать только метатег, но он заставляет браузер выполнять дополнительный синтаксический анализ. Поэтому я думаю, что использование обоих следует рассматривать как лучшую практику, несмотря на избыточность. - person Daniel Lubarov; 17.05.2015
comment
Why do you say UTF-8 HTML should be without a BOM Действительно, отсутствие спецификации является той самой причиной, по которой вам в первую очередь понадобится HTTP-заголовок или метатег. - person Stijn de Witt; 19.08.2015
comment
Summing up: don't use BOM for UTF-8 Я не могу с этим согласиться. Спецификация в UTF-8 очень полезна для обозначения типа кодировки. В противном случае нам придется угадывать или использовать такие вещи, как метатеги, к которым относится этот вопрос. Классная особенность спецификации заключается в том, что она является частью спецификации Unicode и, таким образом, может использоваться для всех данных, закодированных в Unicode, а не только в HTML. Что мы должны сделать, так это использовать спецификации везде, позволить устаревшему программному обеспечению взорваться, сообщать об этих ошибках и исправлять их. - person Stijn de Witt; 19.08.2015
comment
@StijndeWitt Не для того, чтобы разжечь священную войну из-за спецификации, но просто предостережение: во многих случаях спецификация часто невидима для других разработчиков или по другим причинам часто игнорируется. Это может привести к проблемам, если вы явно не сообщите об этом своей команде. Одним из примеров является то, что при обслуживании файлов (например, через PHP и Apache) спецификация в файле может немедленно начать поток данных, переопределяя любые строки config / include / header серверного сценария, которые вы хотите проанализировать перед передачей каких-либо данных. - person Beejor; 25.05.2019

Еще одна причина, по которой следует использовать короткий, заключается в том, что он соответствует другим экземплярам, ​​в которых вы можете указать набор символов в разметке. Например:

<script type="javascript" charset="UTF-8" src="/script.js"></script>

<p><a charset="UTF-8" href="http://example.com/">Example Site</a></p>

Согласованность помогает уменьшить количество ошибок и сделать код более читабельным.

Обратите внимание, что атрибут charset не чувствителен к регистру. Вы можете использовать UTF-8 или utf-8, однако UTF-8 более четкий, читаемый и точный.

Кроме того, нет абсолютно никаких причин использовать любое значение, кроме UTF-8, в атрибуте мета-кодировки или заголовке страницы. UTF-8 - это кодировка по умолчанию для веб-документов с HTML4 в 1999 году и единственный практический способ создания современных веб-страниц.

Также вы не должны использовать объекты HTML в UTF-8. Такие символы, как символ авторского права, следует вводить напрямую. Единственные сущности, которые вы должны использовать, - это 5 зарезервированных символов разметки: меньше, больше, амперсанд, штрих, двойной штрих. Сущностям нужен синтаксический анализатор HTML, который вы, возможно, не всегда захотите использовать в будущем, они вносят ошибки, делают ваш код менее читаемым, увеличивают размеры ваших файлов и иногда некорректно декодируются в различных браузерах в зависимости от того, какие сущности вы использовали. Узнайте, как вводить / вставлять символы авторского права, товарного знака, открытой цитаты, закрывающей цитаты, апострофа, длинного тире, короткого тире, маркера, евро и любых других символов, с которыми вы сталкиваетесь в своем контенте, и использовать эти фактические символы в своем коде. На Mac есть средство просмотра символов, которое вы можете включить в настройках системы клавиатуры, и вы можете найти и затем перетащить нужные символы или использовать соответствующую программу просмотра клавиатуры, чтобы увидеть, какие клавиши вводить. Например, товарный знак - Option + 2. UTF-8 содержит все символы и символы всех письменных языков. Так что нет оправдания использованию - вместо длинного тире. Также неплохо было бы изучить правила пунктуации и типографики ... например, зная, что точка находится внутри закрытых кавычек, а не снаружи.

Использование тега для чего-то вроде типа содержимого и кодирования в высшей степени иронично, поскольку, не зная этих вещей, вы не можете проанализировать файл, чтобы получить значение метатега.

Нет, это не правда. Браузер начинает синтаксический анализ файла в кодировке браузера по умолчанию, либо UTF-8, либо ISO-8859-1. Поскольку US-ASCII является подмножеством ISO-8859-1 и UTF-8, браузер может нормально читать в любом случае ... это то же самое. Когда браузер встречает мета-тег charset, если кодировка отличается от того, что браузер уже использует, браузер перезагружает страницу в указанной кодировке. Вот почему мы помещаем метатег набора символов вверху, сразу после тега заголовка, перед всем остальным, даже перед заголовком. Таким образом, вы можете использовать в заголовке символы UTF-8.

Вы должны сохранить файлы в кодировке UTF-8 без спецификации.

Это не совсем так. Если в вашем документе есть только символы US-ASCII, вы можете сохранить его как US-ASCII и использовать как UTF-8, потому что это подмножество. Но если есть символы Unicode, вы правы, вы должны сохранить как UTF-8 без спецификации.

Если вам нужен хороший текстовый редактор, который сохранит ваши файлы в UTF-8, я рекомендую Notepad ++.

На Mac используйте Bare Bones TextWrangler (бесплатно) из Mac App Store или Bare Bones BBEdit, который есть в Mac App Store за 39,99 долларов ... очень дешево для такого замечательного инструмента. В любом приложении в нижней части окна документа есть меню, в котором вы указываете кодировку документа и можете легко выбрать «UTF-8 без спецификации». И, конечно же, вы можете установить это значение по умолчанию для новых документов в настройках.

Но если ваш веб-сервер обслуживает кодировку в HTTP-заголовке, что рекомендуется, оба [метатеги] излишни.

Это неверно. Вы, конечно, должны установить кодировку в HTTP-заголовке, но вы также должны установить ее в атрибуте мета-кодировки, чтобы страница могла быть сохранена пользователем из браузера в локальное хранилище, а затем снова открыта позже, и в этом случае единственное указание на кодировку, которая будет присутствовать, - это атрибут мета-кодировки. Вы также должны установить базовый тег по той же причине ... на сервере базовый тег не нужен, но при открытии из локального хранилища базовый тег позволяет странице работать так, как если бы она была на сервере, со всеми активы на месте и так далее, без битых ссылок.

AddDefaultCharset UTF-8

Или вы можете просто изменить кодировку определенных типов файлов следующим образом:

AddType text/html;charset=utf-8 html

Совет для обслуживания файлов UTF-8 и Latin-1 (ISO-8859-1) - дать файлам UTF-8 расширение «текст», а файлам Latin-1 - «txt».

AddType text/plain;charset=iso-8859-1 txt
AddType text/plain;charset=utf-8 text

Наконец, подумайте о том, чтобы сохранять ваши документы с окончаниями строк Unix, а не с окончаниями строк в устаревших версиях DOS или (классических) Mac, которые не помогают и могут повредить, особенно в дальнейшем по мере того, как мы все дальше и дальше отдаляемся от этих устаревших систем. Документ HTML с допустимой кодировкой HTML5, UTF-8 и окончанием строк Unix - это хорошо сделанная работа. Вы можете делиться, редактировать, хранить, читать, восстанавливать и полагаться на этот документ во многих контекстах. Это лингва-франка. Это цифровая бумага.

person Simon White    schedule 20.08.2011
comment
Если в вашем документе есть только символы ISO-8859-1, вы можете сохранить его как ISO-8859-1 и использовать как UTF-8, потому что это подмножество - неверно. Будет правильно, если вы измените ISO-8859-1 на US-ASCII. US-ASCII совместим с UTF-8, потому что это подмножество, а ISO-8859-1 - нет. Чтобы преобразовать ISO-8859-1 (содержащий символы, отличные от ASCII) в UTF-8, вам нужно будет закодировать символы, отличные от ASCII. Кодовые точки для ISO-8859-1 существуют в Unicode, но UTF-8 кодирует те, которые находятся за пределами US-ASCII, иначе, чем ISO-8859-1. - person thomasrutter; 21.06.2012
comment
Ваша точка зрения об объектах HTML хороша. Раньше я использовал сущности только для того, чтобы обнаружить, что они были преобразованы в свои символы UTF-8 после сохранения в разных системах и / или открытия в разных редакторах. Однако стоит отметить, что неразрывные пробелы () могут приводить к запутанным результатам, поскольку вы обычно не видите их в своем редакторе, поэтому для ясности лучше всего оставить их как объекты (по моему опыту). - person squidbe; 08.12.2012
comment
"You should also set a base tag..." должен сопровождаться предупреждениями, описанными здесь. - person Mafuba; 19.03.2013
comment
Еще одна причина, по которой вы можете предпочесть объекты HTML, - это использование чего-то вроде ionicons. Я бы предпочел увидеть &#xf101;, чем глиф по умолчанию или какой-нибудь странный символ, которого я не узнаю. - person Daniel Lubarov; 17.05.2015

<meta charset="utf-8"> был введен с / для HTML5.

Как упоминалось в документации, оба действительны. Однако <meta charset="utf-8"> предназначен только для HTML5 (и его легче вводить / запоминать).

Со временем старый стиль станет нерекомендуемым в ближайшем будущем. Я бы придерживался нового <meta charset="utf-8">.

Есть только один путь, но вверх. В случае с технологиями это постепенный отказ от старых (действительно, ДЕЙСТВИТЕЛЬНО быстро)

Документация: Атрибут мета-кодировки HTML - W3Schools

person Omar    schedule 25.06.2014
comment
Относительно ссылки см. meta.stackoverflow.com/questions/ 280478 / why-not-w3schools-com - person tripleee; 17.12.2015

Не оспаривая другие ответы, я думаю, что стоит упомянуть следующее.

  1. Обозначения «длинное» (http-equiv) и «короткое» равны, выигрывает тот, который наступит первым;
  2. Заголовки веб-сервера заменят все теги <meta>;
  3. BOM (метка порядка байтов) переопределит все, и во многих случаях это повлияет на html 4 (и, возможно, на другие вещи);
  4. Если вы не объявляете кодировку, вы, вероятно, получите свой текст в «резервной кодировке текста», которая определена вашим браузером. Ни в Firefox, ни в Chrome это utf-8;
  5. В отсутствие других подсказок браузер попытается прочитать ваш документ, как если бы он был в ASCII, чтобы получить кодировку, поэтому вы не можете использовать какие-либо странные кодировки (хотя utf-16 с BOM должен работать);
  6. Хотя в спецификациях сказано, что объявление кодировки должно находиться в пределах первых 512 байтов документа, большинство браузеров попытаются прочитать больше.

Вы можете протестировать, запустив echo 'HTTP/1.1 200 OK\r\nContent-type: text/html; charset=windows-1251\r\n\r\n\xef\xbb\xbf<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta charset="windows-1251"><title>привет</title></head><body>привет</body></html>' | nc -lp 4500 и указав в браузере localhost:4500. (Конечно, вы захотите изменить или удалить части. Часть спецификации - \xef\xbb\xbf. Будьте осторожны с кодировкой вашей оболочки.)

Помните, что очень важно явно указать кодировку. Предоставление браузеру возможности догадываться может привести к проблемам с безопасностью.

person squirrel    schedule 15.01.2016
comment
Хорошие моменты, но можете ли вы подробно рассказать, о каких проблемах безопасности вы имеете в виду? - person Armfoot; 04.02.2016
comment
Длинная нотация не должна преобладать над короткой - просто первая в документе должна победить. - person gsnedders; 18.08.2016
comment
@Armfoot Раньше были проблемы с UTF-7, насколько я помню. Кроме того, нюхать в Интернете, как правило, плохо, например когда вы загружаете изображение, то это воспринимается как содержимое сценария. - person phk; 23.09.2016
comment
@gsnedders протестировал в chrome и firefox, вы правы. отредактировал ответ соответственно. Armfoot: это было что-то из-за какой-то 7-битной кодировки, не помню, что именно. - person squirrel; 14.10.2016
comment
Ни в Firefox, ни в Chrome нет utf-8 - Что вы имеете в виду? Если не utf-8, то что это тогда? - person Craig McQueen; 21.08.2017
comment
@CraigMcQueen почти уверен, что резервный браузер по-прежнему (в 2018 году) по умолчанию использует западноевропейские значения в Западной Европе, поэтому я предполагаю, что по умолчанию используется любая кодировка до юникода, которая преобладала в каждом регионе. Пользователи могут установить откат на utf-8, но это просто обнажит всю дрянную кодировку, которую тысячи сайтов все еще используют как ошибочные старшие байтовые символы ascii, так что это все еще не распространено. Еще жаль. Не вижу, как это изменится без небольшого принуждения со стороны поставщиков браузеров, и они не стремятся ломать унаследованные вещи. - person brennanyoung; 13.08.2018

При использовании HTML5 используйте <meta charset="utf-8" /> для веб-браузеров.

Используйте <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> при использовании HTML4 или XHTML или для устаревших парсеров dom, например DOMDocument в php 5.3.

person Timo Huovinen    schedule 26.11.2015

Чтобы встроить подпись в электронное письмо, я бы использовал длинную версию:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Причина в том, что не многие читатели электронной почты используют html5, поэтому всегда лучше использовать старые стили html. На самом деле, лучше использовать таблицы, чем divs + css.

person chelder    schedule 23.07.2019

Некоторые новости основаны на Mozilla Foundation и sitepoint

Не используйте это значение (http-equiv=content-type), так как оно устарело. Предпочитайте атрибут charset в элементе ‹meta>. введите здесь описание изображения

person user10089632    schedule 15.08.2017
comment
о, наконец, что-то более свежее - person Ayyash; 31.03.2020

Я бы порекомендовал сделать это так, чтобы все соответствовало HTML5.

<meta charset="UTF-8">

EG:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
</body>
</html>
person Des Cahill    schedule 11.10.2020