Кодирование Firefox и UTF-16 - PullRequest
       21

Кодирование Firefox и UTF-16

4 голосов
/ 17 ноября 2011

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

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

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

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

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

Спасибо

Ответы [ 2 ]

21 голосов
/ 14 августа 2013

(Раскрытие: я разработчик, отвечающий за соответствующий код в 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

О-о-о.: -)

и я устанавливаю в заголовке каждой 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 - разница исчезнет.
0 голосов
/ 17 ноября 2011

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

...