Почему IE не может показать кодированный текст UTF-8?
У меня есть несколько китайских иероглифов, которые я пытаюсь отобразить на веб-сайте Kentico. Этот текст копируется/вставляется в редактор FCK Kenticos, а затем сохраняется и отображается на сайте. В Firefox, Chrome и Safari символы отображаются точно так, как ожидалось. В режиме IE 8 Standard я вижу только поля.
Текст кодируется в кодировке UTF-8, и, насколько я могу судить, он правильно кодируется в ответе с сервера. Существует заголовок ответа Content-Type: text/html; charset=utf-8
и метатег <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
на странице. Когда я загружаю HTML с сервера и сравниваю байты соответствующих символов с исходным текстовым документом UTF-8, все байты совпадают, кроме HTML не включает спецификацию.
Это похоже на IE 8 в режиме стандартов. В IE 8 Quriks: он работает. Стандарты IE 7: он работает. IE 7 Quirks: работает. Я не уверен, как стандартный режим вызовет эту проблему.
Странно, если я вижу источник из IE, символы отображаются в исходном представлении правильно.
Любые предложения о том, что здесь может быть неправильным? Мне что-то не хватает?
Ответы
Ответ 1
Я не могу объяснить это подробно. Но это действительно известная проблема.
Вот небольшой воспроизводимый фрагмент кода:
<!DOCTYPE html>
<html lang="en">
<head><title>test</title></head>
<body><p>ﺡ<br>0 0</p></body>
</html>
Сохраните его в UTF-8 и просмотрите в IE8. Вы ничего не видите. Замените 0 0
на 00
и перезагрузите страницу. Все будет хорошо! Это совершенно удивительно. При этом замените 0 0
на a a
или <br>
на </p><p>
. Это будет связано с ошибками в рендерингх пробелов.
Извините, у меня нет официальных ресурсов, подтверждающих это, но это просто еще одно доказательство того, что IE8 не так хорош, как мы ожидаем. Лучше всего попытаться изменить HTML и/или построить его шаг за шагом, чтобы он работал в какой-то момент или когда тщетно, добавьте следующий метатег в голову, чтобы заставить IE8 работать в режиме IE7:
<meta http-equiv="X-UA-Compatible" content="IE=7" />
Ответ 2
Кодировка IE по умолчанию - западноевропейская (ISO), поэтому вам нужно вручную ее изменить в UTF-8 или принудительно использовать IE для использования данной кодировки следующим образом:
И вам также нужно использовать атрибут lang
в теге <html>
для объявления языка
<html lang="zh">
для китайского
Ответ 3
Просто дикая догадка, но это может быть проблема с шрифтом. Возможно, шрифты, доступные вашему браузеру, могут представлять китайские иероглифы.
Ответ 4
Мне удалось исправить ту же проблему, изменив формат файла UTF на "UTF8 с байтом порядка байтов".
(Редактор, который я использую, позволяет мне легко переключаться с форматами файлов, не уверен, как действовать иначе, но стоит взглянуть на различные форматы файлов UTF, IE (8) просто не нравится UTF8 без байтов...)
Я также смог воспроизвести фрагмент из приведенного выше ответа;
<!DOCTYPE html>
<html lang="en">
<head><title>test</title></head>
<body><p>ﺡ<br>0 0</p></body>
</html>
Но мои результаты были "прерывистыми", в то время как в UTF-Без спецификации (иногда акценты появлялись, иногда в других странных символах, и это не выглядело как проблема с передачей пробелов для меня...)
Обратите внимание, что я играл с lang = "fr" и lang = "es", но во всех случаях изменение формата файла UTF, похоже, постоянно разрешало проблемы с отображением акцентов.:)
Я не на 100% знаком с UTF, но если символы кодируются с использованием 2 байтов, можно было бы предположить, что проблемы белого пространства и непонятые символы могут быть связаны с несогласованными байтами в источниках.
Ответ 5
Это может быть тот же самый тип, который заставлял Rails 3 добавлять к нему снеговика: Что такое параметр _snowman в Ruby on Rails 3 для?