Отображение символов Unicode в HTML

Я хочу просто отображать тик (✔) и перекрестные (✘) символы на странице HTML, но он отображается как прямоугольник или goop ✠"- очевидно, что-то связано с кодировкой.

Я установил метатег для отображения utf-8, но, очевидно, что-то не хватает.

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

Изменить/Решение: Из комментариев, сделанных с использованием FireBug, я обнаружил, что заголовки, переданные моей страницей, были фактически "Content-Type: text/html", а не UTF-8. Глядя на формат файла с помощью Notepad ++, мой файл был отформатирован как "UTF-8 без спецификации". Изменяя это только на UTF-8, символы теперь отображаются правильно... но firebug все же, кажется, указывает один и тот же тип содержимого.

Ответ 1

Вы должны убедиться, что заголовки HTTP-сервера верны.

В частности, заголовок:

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

.

Метатег игнорируется браузерами, если присутствует HTTP-заголовок.

Также убедитесь, что ваш файл фактически закодирован как UTF-8 перед его обслуживанием, проверьте/попробуйте следующее:

  • Убедитесь, что ваш редактор сохраняет его как UTF-8.
  • Убедитесь, что ваш FTP или любая программа передачи файлов не работает с файлом.
  • Попробуйте с объектами, закодированными в HTML, например &#uuu;.
  • Чтобы быть уверенным, hexdump файл и выглядеть как символ, для ✔ это должен быть E2 9C 94.

Примечание. Если вы используете символ юникода, для которого ваша система не может найти глиф (без шрифта с этим символом), ваш браузер должен отображать знак вопроса или некоторый символ, похожий на блок. Но если вы видите несколько римских символов, как вы, это означает проблему с кодировкой.

Ответ 2

Я знаю, что ответ уже принят, но хотел указать несколько вещей.

Настройка content-type и charset, очевидно, является хорошей практикой, поэтому сделать это на сервере намного лучше, потому что она обеспечивает согласованность в вашем приложении.

Однако я использовал бы UTF-8, только если язык моего приложения использует много символов, доступных только в кодировке UTF-8. Если вы хотите в любой момент показать символ или символ юникода, вы можете сделать это, не меняя charset своей страницы.

HTML визуализаторы всегда могли отображать символы, которые не являются частью набора символов кодировки страницы, если вы упомянете символ в numeric character reference (NCR). Звучит странно, но его правда.

So, even if your HTML has a header that states it has an encoding of ansi or any of the iso charsets, you can display a check mark by using its html character reference, in decimal - &#10003; or in hex - &#x2713;

Поэтому немного сложно понять, почему вы сталкиваетесь с этой проблемой на своих страницах. Можете ли вы проверить правильность значения NCR, это хорошая ссылка http://www.fileformat.info/info/unicode/char/2713/index.htm

Ответ 3

Убедитесь, что вы фактически сохранили файл как UTF-8, вместо этого используйте специальные объекты HTML (&#nnn;) для специальных символов.

Ответ 4

В отличие от предложенного Николасом, тег meta фактически не игнорируется браузерами. Тем не менее, заголовок Content-Type HTTP всегда имеет приоритет над наличием тега meta в документе.

Поэтому убедитесь, что вы либо отправляете правильное кодирование через HTTP-заголовок, либо вообще не отправляете этот HTTP-заголовок (не рекомендуется). Тег meta в основном является резервным вариантом для локальных документов, которые arent отправляются через HTTP-трафик.

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

Ответ 5

Я думаю, что это проблема с файлом, вы просто сохранили свой файл в 1-байтовой кодировке, такой как latin-1. Google в вашем редакторе и как установить файлы в utf-8.

Интересно, почему существуют редакторы, которые не используют utf-8 по умолчанию.