Відображення символів Unicode в HTML


89

Я хочу просто відобразити галочку (✔) і перехрестити (✘) символи на 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 все одно вказує на той самий тип вмісту.

Відповіді:


56

Переконайтеся, що заголовки сервера HTTP правильні.

Зокрема, заголовок:

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

повинні бути присутніми.

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

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

  • Переконайтеся, що ваш редактор зберігає його як UTF-8.
  • Переконайтеся, що ваш FTP або будь-яка програма передачі файлів не псується з файлом.
  • Спробуйте із кодованими сутностями HTML, наприклад &#uuu;.
  • Щоб бути справді впевненим, згекструйте файл і виглядайте символом, для ✔ це повинен бути E2 9C 94.

Примітка: Якщо ви використовуєте символ унікоду, для якого ваша система не може знайти гліф (шрифт із цим символом відсутній), ваш браузер повинен відображати знак питання або якийсь блок, подібний до символу. Але якщо ви бачите кілька римських символів, як ви, це позначає проблему з кодуванням.


Насправді мета-тег не ігнорується, але заголовок HTTP має перевагу. Дякую Konrad за цю точність.

8
Зверніть увагу, що для використання символу Юнікоду у contentвластивості ::beforeселектора CSS потрібно використовувати позначення зворотної косої риски. наприклад: '\ 2713' замість '& # 2713'.
Fabien Snauwaert

18

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

Встановлення content-typeта charset, очевидно, є хорошою практикою, робити це на сервері набагато краще, оскільки це забезпечує узгодженість вашої програми.

Однак я б використовував UTF-8лише тоді, коли мова мого додатка використовує багато символів, які доступні лише в UTF-8наборі символів. Якщо ви хочете показати символ або символ Unicode в одному з випадків, ви можете зробити це, не змінюючи charsetсторінки.

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

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

Тому трохи важко зрозуміти, чому ви стикаєтесь із цією проблемою на своїх сторінках. Чи можете ви перевірити, чи правильне значення NCR, це хороша довідка http://www.fileformat.info/info/unicode/char/2713/index.htm


6
"Однак я б використовував UTF-8 лише тоді, коли мова мого додатка використовує багато символів, доступних лише в кодировці UTF-8" Чому? У чому недолік перемикання?
dumbledad

3
@dumbledad: Дуже гарне запитання, мабуть, я дозволив власному упередженню затьмарити мою відповідь. Я мав на увазі сказати, що якщо уся ваша програма вже не utf-8, зміна її програми на одній сторінці може бути занадто великою роботою. Крім того, якщо вашій мові програмування та вмісту не потрібні символи utf-8, ви можете випадково скопіювати вставку небажаного символу, з яким у вашому редакторі буде добре (оскільки він знаходиться в режимі utf-8), але під час виконання коду не вдасться. Сказавши це, коли зможете оновити кодування та набір символів
Акшай,

6

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


Здається, немає сутності HTML для ✔, чи я її пропустив? Як ви "насправді" зберігаєте файл як UTF-8 і як ви можете перевірити?
Пітер Крейг,

@Peter: за допомогою гідного редактора. Більшість текстових редакторів мають можливість у своєму діалоговому вікні "зберегти як" вказати кодування файлу, або у них є інша опція, прихована десь у їх меню. Vim використовує fileencodingналаштування.
Конрад Рудольф

8
@Peter, ви можете посилатися на будь-який символ за його кодом. Спробуйте & # x2714; для кліща.
Ден Дайер,

зберегти як utf-8. цікава концепція. добре працює, якщо ви створюєте статичні HTML-сторінки. але ... як щодо динамічних веб-сторінок? ця річ із символами Unicode / utf-8 / для мене справді дуже заплутана. мій серверний код - perl. заголовок http правильно встановлений, як і заголовок html. W3C Internationalization Checker підтверджує, що для мене встановлений документ utf-8. чи CaSinG має значення? нарешті, як щодо вікон введення тексту? я все ще отримую goop! :(
Jarett Lloyd

Додаток до попереднього коментаря: моя база даних показує, що дані були введені правильно, а символи відображаються правильно. отже, не проблема з базою даних. мій скрипт perl (вірніше, редактор) налаштований на збереження сценаріїв як utf-8. мій сервер, apache2, я впевнений, що не заважає або встановлений правильно. все це сказано, досі не впевнений, чому символи гуп. тьфу. повинен бути кращий спосіб
Джарет Ллойд,

5

На відміну від запропонованого Ніколасом, metaтег насправді не ігнорується браузерами. Однак Content-Typeзаголовок HTTP завжди має перевагу над наявністю metaтегу в документі.

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

Використання сутностей HTML також слід розглядати як обхідний шлях - це навшпиньках навколо справжньої проблеми. Правильна настройка веб-сервера запобігає великим неприємностям.


0

Я думаю, що це проблема з файлом, ви просто зберегли файл у 1-байтовому кодуванні, як Latin-1. Погуглить ваш редактор і як встановити файли на utf-8.

Цікаво, чому є редактори, які не використовують за замовчуванням utf-8.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.