Нечетная проблема кодировки HTML / XML - PullRequest
2 голосов
/ 17 октября 2011

У меня есть некоторые реальные проблемы с сайтом, который мы строим на нашей специальной системе управления контентом.Система отображает все представления с помощью XSLT, что может быть проблемой.

Проблема, с которой мы сталкиваемся, по-видимому, является результатом несовпадения кодировки символов, но я изо всех сил пытаюсь выяснить, какая часть процессасломался.

Проблема не возникает в Firefox или Chrome, и в IE хорошо подходит для начальной загрузки страницы и при ее обновлении, однако, при использовании кнопки «назад» или «вперед»Кнопка в IE, я нахожу, что любые символы Unicode отображаются в виде белого вопросительного знака в черном ромбе, что означает, что используется неправильный набор символов.В результате этого мы также увидели странные результаты со страницей, проиндексированной google (она, по-видимому, индексирует ссылку DOCTYPE и содержимое элемента head, а не содержимое, как это обычно бывает).

Все таблицы стилей XSLT выводят UTF-16, а сами файлы XSLT являются файлами UTF-16 (ранее было несоответствие).Сайт обслуживает страницы как UTF-16, а в выводе HTML есть метатег, устанавливающий тип контента для использования кодировки UTF-16.

Я проверил результаты с помощью Fiddler, чтобы увидеть, что исходит отсервер, однако, Fiddler не регистрирует запрос / ответ, когда IE использует кнопки «назад» / «вперед», поэтому, вероятно, он где-то их кэширует.

У кого-нибудь есть идеи?

Ответы [ 2 ]

2 голосов
/ 17 октября 2011

Сайт обслуживает страницы как UTF-16

Whoah! Не делай этого.

Существует несколько ошибок браузера, связанных со страницами UTF-16. Я раньше не слышал об этом конкретном случае, но для UTF-16 характерно, например, прерывать обработку форм. UTF-16 очень редко используется в Интернете, и, как следствие, он обнаруживает множество малоизвестных ошибок в браузерах и других агентах (таких как поисковые системы и другие инструменты, написанные на одном из многих языков сценариев с плохой поддержкой Unicode, таких как PHP).

вывод HTML имеет метатег, устанавливающий тип контента для использования кодировки UTF-16

Это не имеет никакого эффекта. Если браузер не может обнаружить UTF-16, то, поскольку UTF-16 не совместим с ASCII, он даже не сможет прочитать метатег.

В Интернете всегда используйте ASCII-совместимую кодировку - обычно UTF-8. UTF-8 - безусловно, лучшая поддерживаемая кодировка, и почти всегда она меньше по размеру, чем UTF-16. UTF-16 не дает никаких преимуществ, и я бы избегал его в любом случае.

0 голосов
/ 17 октября 2011

Возможно, IE повреждает файлы, когда они читаются из кеша. Может быть связано с этим (к сожалению, без ответа) вопрос

Firefox & IE: поврежденные данные при извлечении из кэша

Несколько вещей, которые вы можете проверить / попробовать:

  • Убедитесь, что кодировка указана в заголовке http Content-Type: и объявлении <?xml encoding=...> в верхней части XML
  • Указываете ли вы порядковый номер вашего UTF-16 или используете метку порядка байтов? Если последнее, попробуйте указать. Я думаю, что Windows обычно любит UTF-16LE.
  • Вы можете попробовать другую кодировку? А именно UTF-8?
  • Можете ли вы отключить кэширование со стороны сервера (если это целесообразно)? pragma: no-cache или его современным эквивалентом? (извините, я давно не играл с этим материалом).

Извините, здесь нет реального ответа, но слишком много, чтобы писать как комментарий.

...