Почему IE не отображает текст в кодировке UTF-8?

У меня есть несколько китайских иероглифов, которые я пытаюсь отобразить на веб-сайте Kentico. Этот текст копируется / вставляется в редактор Kenticos FCK, а затем сохраняется и появляется на сайте. В Firefox, Chrome и Safari символы отображаются точно так, как ожидалось. В стандартном режиме IE 8 я вижу только поля.

Текст в кодировке 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: Работает. Я не уверен, как стандартный режим может вызвать эту проблему.

Как ни странно, если я просматриваю исходный код из IE, символы отображаются в исходном виде правильно.

Любые предложения о том, что здесь может быть не так? Я упускаю что-то очевидное?


person mrdrbob    schedule 13.08.2010    source источник
comment
У нас была проблема с IE11, который иногда не отображал значки UTF-8, и я нашел этот вопрос в своей охоте за решением, но моя проблема на самом деле была вызвана заголовками no-store и no-cache, как описано в этом Страница устранения неполадок Font Awesome . На всякий случай, если кто-то еще столкнется с такой же проблемой.   -  person Sam Williams    schedule 18.05.2016


Ответы (5)


Я не могу это подробно объяснить. Но это действительно известная проблема.

Вот небольшой воспроизводимый фрагмент кода:

<!DOCTYPE html>
<html lang="en">
    <head><title>test</title></head>
    <body><p>&#65185;<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" />
person BalusC    schedule 13.08.2010
comment
Это безумие! Но принудительный режим совместимости с IE 7 действительно работает на публичной стороне. Теперь мне просто нужно выяснить, как включить режим совместимости внутри iframe редактора FCK, чтобы пользователь мог фактически редактировать текст. Спасибо за информацию! - person mrdrbob; 17.08.2010
comment
Ваше здоровье! Удачи с этой странной проблемой. - person BalusC; 17.08.2010
comment
Я только что потратил на это 4 часа, чтобы прийти к аналогичному решению (уф!). Однако вместо того, чтобы исправлять режим совместимости с IE7 (поскольку IE9 отсутствует), я просто установил для него значение IE = Edge, что равносильно тому, чтобы сказать, используйте последнее, о котором вы знаете. Это, казалось, заставило IE9 признать тот факт, что он должен быть в UTF-8, что очень странно, но это работает. Здесь для справки, если другие тоже это поймут. - person Pete Duncanson; 30.07.2012
comment
Трахни меня. Я презираю IE8 - person Adrien Be; 04.09.2014

Кодировка IE по умолчанию - западноевропейская (ISO), поэтому вам нужно вручную изменить ее на UTF-8 или заставить IE использовать заданную кодировку, например:

  • HTML 4.01

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

  • HTML 5

    <meta charset="UTF-8">

И вам также необходимо использовать атрибут lang в теге <html> для объявления языка

    <html lang="zh">

для китайцев

person Cassian    schedule 13.02.2013
comment
Это прекрасно работает! Добавление языкового атрибута в тег html помогло. - person Mel_T; 26.11.2015

Просто дикая догадка, но это может быть проблема со шрифтом. Возможно, шрифты, доступные в вашем браузере, могут «отображать указанные китайские иероглифы».

person troelskn    schedule 13.08.2010

Мне удалось исправить ту же проблему, изменив формат UTF файла на «UTF8 With Byte Order Mark».

(Используемый мной редактор позволяет мне легко переключать форматы файлов, не зная, как поступить иначе, но стоит взглянуть на различные форматы файлов UTF, IE (8) просто не любит UTF8 без меток порядка байтов ...)

Мне также удалось воспроизвести фрагмент из приведенного выше ответа;

<!DOCTYPE html>
<html lang="en">
    <head><title>test</title></head>
    <body><p>&#65185;<br>0 0</p></body>
</html>

Но мои результаты были "прерывистыми" в UTF-без спецификации (иногда появлялись акценты, иногда странные символы, и это не выглядело для меня как проблема с рендерингом пробелов ...) Обратите внимание, что я возился с lang = "fr" и lang = "es", но во всех случаях изменение формата файла UTF, похоже, навсегда решило мои проблемы с отображением акцентов. :)

Я не на 100% знаком с UTF, но если символы закодированы с использованием 2 байтов, можно было бы предположить, что проблемы с пробелами и неправильно понятые символы могут быть связаны с неверно выровненными байтами в источниках.

person Selt    schedule 26.07.2013

Это может быть то же самое, что заставило Rails 3 добавить в свой вывод персонажа снеговика: Для чего нужен параметр _snowman в формах Ruby on Rails 3?

person Jon Smock    schedule 13.08.2010