Сущности символов HTML и набор кодировок символов

При включении сущностей HTML в документ HTML должны ли сущности относиться к тому же набору кодировок символов, который указан в документе?

Например, если я собираюсь использовать знак авторского права в HTML-документе, указанном как UTF-8, необходимо ли использовать HTML-объект Unicode (©) или можно использовать другие объекты, такие как ASCII HTML-объект ( ©)?

Пожалуйста, объясните свой ответ. Я знаю, что это "сработает", но есть ли случай, когда это не сработает?

Спасибо!


person Mike Moore    schedule 29.08.2010    source источник
comment
ASCII не включает символ авторского права в набор символов, которые он кодирует.   -  person Thanatos    schedule 29.08.2010
comment
Вероятно, он просто имел в виду ISO-8859-1 (ISO Latin 1). Я слышал, что многие люди используют ASCII взаимозаменяемо с этой кодировкой, и хотя технически это не одно и то же, я просто предполагаю, что они имеют в виду Latin 1.   -  person RibaldEddie    schedule 29.08.2010
comment
На самом деле я исходил из такой таблицы: ascii.cl/htmlcodes.htm Я предполагал что, поскольку в таблице отображается столбец ASCII для символа авторского права, он был в кодировке.   -  person Mike Moore    schedule 29.08.2010
comment
Но я вижу, что это: ascii.cl не включает символ авторского права. Что означает ASCII в предыдущей ссылке?   -  person Mike Moore    schedule 29.08.2010
comment
люди очень и очень свободно относятся к термину ASCII в наши дни. Они почти всегда означают ISO Latin 1. См. это: en.wikipedia.org/wiki/Extended_ASCII   -  person RibaldEddie    schedule 29.08.2010


Ответы (2)


© и © определяют один и тот же символ — 169 эквивалентно шестнадцатеричному A9. Оба они указывают символ авторского права. Объекты символов в HTML всегда относятся к кодовым точкам Unicode, это описано в Стандарте HTML 4. . Таким образом, даже если ваш набор символов изменится, ваши сущности по-прежнему будут ссылаться на одни и те же символы.

Это также означает, что вы можете кодировать символы, которых на самом деле нет в выбранном вами наборе символов. Я только что создал документ в наборе символов ISO-8859-1, но он включает греческую лямбду. Кроме того, ASCII не может напрямую кодировать символ авторского права, но может с помощью символов.

Редактировать: Читая комментарии к другому ответу, я хочу немного пояснить это. Если вы используете UTF-8 в качестве кодировки символов для своего документа, вы можете в необработанном исходном коде HTML написать символ авторского права как есть. (Конечно, вам нужно найти какой-то способ его ввода: обычно используется копирование и вставка.) UTF-8 позволит вам напрямую кодировать любой символ, который вы хотите. ISO-8859-1 гораздо более ограничен, а ASCII тем более. Например, в моем HTML, если мой документ является документом UTF-8, я могу сделать:

<p>Hi there. This document is ©2010. Good day!</p>

or:

<p>Hi there. This document is &#xA9;2010. Good day!</p>

or:

<p>Hi there. This document is &copy;2010. Good day!</p>

Первый действителен только в том случае, если набор символов поддерживает «©». Два других всегда действительны, но менее читабельны. Какой бы текстовый редактор вы ни использовали, если он того стоит, он должен быть в состоянии сказать вам, в каком наборе символов он кодирует документ.

Если вы сделаете это, вам нужно убедиться, что ваш веб-сервер информирует клиента о правильном наборе символов или что ваш документ объявляет его примерно так:

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

Я использовал UTF-8 в качестве примера. XHTML должен иметь набор символов в открывающем теге <?xml ... ?>.

person Thanatos    schedule 29.08.2010
comment
Правильно, поэтому, если вы по какой-то причине не используете ни Latin 1, ни Unicode в качестве набора символов вашего документа, вы все равно можете отображать символ авторского права, используя эти сущности. - person RibaldEddie; 29.08.2010
comment
@Thanatos Где авторитетный источник этой информации? Я выполняю работу, которая охватывает больше, чем этот вариант использования, и хотел бы получить более подробную информацию. Спасибо. - person ; 14.02.2017
comment
@jeyoung Источник какой части этого поста вы ищете? Как кодировать объекты цитируется в посте, хотя сегодня я бы дал ссылку на стандарт HTML5 (но я не думаю, что HTML5 изменяет этот аспект). Если вы просто ищете число (например, как перевести © в &#xA9;): во-первых, я бы рекомендовал использовать UTF-8 и просто писать символ буквально, т. е. просто поставить © или аналогичный в вашем источнике, так как это затем непосредственно читается человеком (ответ RibaldEddie). В противном случае число является просто кодовой точкой Unicode. shapecatcher.com позволит вам нарисовать нужного персонажа, - person Thanatos; 15.02.2017
comment
…на unicode.org есть графики, поиск в Google unicode ‹описание вашего персонажа› обычно работает, например, авторское право unicode. - person Thanatos; 15.02.2017
comment
@Thanatos Я имел в виду руководство по выбору того, какие объекты символов следует кодировать, а какие вводить как есть. - person ; 17.02.2017

Прелесть кодировки UTF-8 в том, что вы можете просто включить двоичный символ. Вам вообще не нужно кодировать его как сущность. Таким образом: ©

О, вы просто хотите знать разницу между двумя сущностями? Здесь ничего нет. Один описывает байт в шестнадцатеричном формате, а другой — в десятичном.

person RibaldEddie    schedule 29.08.2010
comment
Под двоичным символом вы имеете в виду, что я могу просто скопировать символ из вашего ответа и вставить его в свой HTML-документ (это означает, что он будет выглядеть как символ в коде), и пока это UTF-8, все в порядке? ? - person Mike Moore; 29.08.2010
comment
Этот. Какой смысл использовать UTF-8, если вы собираетесь кодировать все в сущностях? Вот для чего нужен Юникод! - person You; 29.08.2010
comment
Правильный. Некоторые символы по-прежнему должны быть закодированы, но только те, которые имеют семантическое значение в HTML, например меньше и больше. Но знак копирайта просто работает (тм). - person RibaldEddie; 29.08.2010
comment
@You Мое намерение состоит не в том, чтобы кодировать сущности, а в том, чтобы создать правильный HTML-документ. Если UTF-8 позволяет не кодировать, я не буду кодировать. Кроме того, что вы подразумеваете под этим. - person Mike Moore; 29.08.2010
comment
Извините, это должен быть Just Works™. - person RibaldEddie; 29.08.2010
comment
@RibaldEddie - Хотя ваш ответ полезен, он конкретно не отвечает на мой вопрос. Я должен был быть более конкретным. Не могли бы вы прокомментировать, важен ли фактический используемый объект при использовании набора кодировок, отличного от UTF-8? Меня интересует более общий подход. - person Mike Moore; 29.08.2010
comment
Символ авторского права появляется и в ISO-8859-1. ЕСЛИ вы правильно объявляете кодировку, используемую в вашем HTML-документе, чтобы браузеры могли правильно отображать текст, вам также не нужно использовать сущности для ISO-8859-1. Так как ISO-8859-1 и UTF-8 имеют одинаковую карту символов для первого байта, в котором появляется символ авторского права, это довольно безопасный символ для отображения в HTML без использования сущности. Другие символы, которые сопоставляются с несколькими байтами, должны использовать объект, если документ HTML был объявлен браузеру как документ ISO-8859-1. Если объект для многобайтового символа не существует... - person RibaldEddie; 29.08.2010
comment
... тогда вы должны использовать какую-то другую кодировку, наиболее разумно это будет UTF-8. - person RibaldEddie; 29.08.2010