2009-11-08 2 views
75

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

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

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

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

+1

+1 Очень любопытный вопрос! –

+1

Спасибо! Это очень помогло мне! –

ответ

42

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

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

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

должен присутствовать.

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

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

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

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

+0

Фактически, метатег не игнорируется, но заголовок HTTP имеет приоритет. Спасибо Конраду за эту точность. – 2009-11-08 14:15:34

+5

Обратите внимание, что для использования символа Юникода в свойстве 'content' элемента CSS' :: before' следует использовать обратную косую черту. например: '\ 2713' вместо '& # 2713'. –

4

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

+0

Не существует объекта HTML для ✔, или я его пропустил? Как вы «фактически» сохраняете файл как UTF-8 и как вы можете проверить? –

+0

@Peter: с помощью достойного редактора. Большинство текстовых редакторов имеют опцию в диалоговом окне «Сохранить как», чтобы указать кодировку файла, или у них есть другой параметр, скрытый где-то в их меню. Vim использует параметр «fileencoding». –

+8

@Peter, вы можете ссылаться на любой символ по его коду. Попробуйте & # x2714; для тика. –

3

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

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

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

0

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

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

14

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

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

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

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

Таким образом, даже если ваш html имеет заголовок, который гласит, что имеет кодирование ansi или любой из iso кодировок, вы можете отобразить метку, используя его характеристику HTML, в десятичной системе счисления - & # 10003; или в гексагоне - & # x2713;

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

+3

«Тем не менее, я бы использовал UTF-8 только тогда, когда язык моего приложения использует много символов, доступных только в кодировке UTF-8« Почему? Каков недостаток при переключении? – dumbledad

+2

@dumbledad: Очень хороший вопрос, я догадываюсь, что я позвонил своему собственному предвзятому туману. Я хотел сказать, что если все ваше приложение уже не utf-8, изменение его приложения для одной страницы может быть слишком большим. Кроме того, если вашему языку программирования и контенту не нужны символы utf-8, вы можете случайно скопировать пачку нежелательного символа, с которым будет работать ваш редактор (начиная с его в режиме utf-8), но код не будет выполнен во время выполнения. Сказав это, когда сможете, обновите кодировку и набор символов – Akshay

Смежные вопросы