Кодировка Firefox и UTF-16

Я создаю сайт с кодировкой UTF-16. Это означает, что все файлы (html, jsp) закодированы в UTF-18, и я установил в заголовке каждой HTML-страницы:

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

Моя индексная страница правильно отображается в Chrom и IE. Однако Firefox не отображает файл index. Он отображает 2 странных символа и полный код индексной страницы:

��<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-16"> ...

Вы знаете причину? Это должна быть проблема с кодировкой, но я не знаю, где она находится...

Спасибо


person user376112    schedule 17.11.2011    source источник
comment
UTF-18 звучит как новая кодировка. Однажды мы доберемся до UTF-21 и сможем перестать беспокоиться об этих надоедливых проблемах с переменной длиной.   -  person Kerrek SB    schedule 17.11.2011


Ответы (2)


(Раскрытие информации: я являюсь разработчиком, ответственным за соответствующий код в Firefox.)

Я создаю сайт с кодировкой UTF-16.

Пожалуйста, не надо. Краткие правила таковы:

  1. Никогда не используйте UTF-16 для обмена.
  2. Всегда используйте UTF-8 для обмена.
  3. Если вы нарушаете правила 1 и 2 и все еще используете UTF-16, по крайней мере, используйте спецификацию (правильный).
  4. А если серьезно, не нарушайте правила 1 и 2.

Если вы включаете пользовательский контент на свои страницы, использование UTF-16 означает, что ваш сайт уязвим для XSS с социальной инженерией, по крайней мере, в старых браузерах. Попробуйте эту демонстрацию в старой версии Firefox (версия 20 или старше) или версия Opera на основе Presto.

Чтобы избежать этой уязвимости, используйте кодировку UTF-8.

Это означает, что все файлы (html,jsp) закодированы в UTF-18.

Uh oh. :-)

и я установил в заголовке каждой HTML-страницы: <meta http-equiv="content-type" content="text/html; charset=UTF-16">

Метатег работает как объявление внутренней кодировки только тогда, когда используемая кодировка сопоставляет байты метатега с теми же байтами, что и ASCII. Это не относится к UTF-16.

Вы знаете причину?

Не обошлось без полных заголовков ответа и исходного тела ответа в шестнадцатеричном редакторе. Общее решение, как отмечено выше, состоит в том, чтобы всегда использовать UTF-8 и никогда не использовать UTF-16 через HTTP.

Если ваш контент на языке, для которого UTF-16 более компактен, чем UTF-8, две вещи:

  1. Все HTML, JS и CSS на странице более компактны в UTF-8.
  2. gzip устраняет разницу.
person hsivonen    schedule 14.08.2013

Убедитесь, что сервер отправляет заголовок Content-Type с правильной кодировкой.

person driis    schedule 17.11.2011
comment
Если я проверю заголовок запроса с помощью firebug, я увижу: Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Как я могу это изменить? - person user376112; 18.11.2011
comment
Смотрите на ответ, а не на запрос. - person driis; 18.11.2011
comment
Cache-Control public, max-age=600 Content-Type text/html Content-Encoding gzip Server Google Frontend Content-Length 1628 - person user376112; 18.11.2011