У меня странная ситуация:
- Основная HTML-страница обслуживается в кодировке UTF-16 (из-за некоторых требований, выходящих за рамки этого вопроса)
- HTML-страница использует
<script>
теги для загрузки внешних скриптов (т. Е. Они имеют src
атрибуты)
- Эти внешние скрипты находятся в US-ASCII / UTF-8
- Веб-сервер обслуживает сценарии с типом содержимого «application / javascript» без подсказок по набору символов
- Скрипты не имеют метки порядка байтов (BOM)
При загрузке страницы, описанной выше, и Firefox, и Chrome (текущие версии) выдают ошибки, говорящие о том, что первый символ файлов скрипта недействителен.
Просмотр вкладок «Сеть» соответствующих представлений dev-tools показывает, что файлы в порядке (они отлично отображаются в программе предварительного просмотра).
Мой вывод состоял в том, что браузеры путаются в том, какой должна быть кодировка для «всей страницы» или какой-то подобной глупости.
Поэтому я попытался добавить атрибут charsrt="UTF-8"
к тегам <script>
, и это, похоже, решило проблему.
Но я действительно не должен был бы этого делать, не так ли?
Прежде всего, сервер сообщает клиенту, какой тип документа. Это application/javascript
и не определяет набор символов. (Действительно, RFC говорит, что charset
применимо только к text/*
MIME-типам). Хорошо, я могу понять, почему там может быть некоторая двусмысленность.
Но тип документа - это javascript, и есть несколько очевидных правил, как обращаться с файлом javascript, чья фактическая кодировка вам неизвестна. Например, если у него есть спецификация, используйте ее. Если нет никакой спецификации, должно быть действительно легко отличить UTF-16 от UTF-8. (Обратите внимание, что на этих же страницах не возникает проблем с загрузкой файлов CSS, которые также находятся в той же ситуации, что и скрипты.)
И, наконец, страница вложения не должна знать, какова кодировка ее зависимостей. Фактически, это может быть невозможно , чтобы он знал, и явно указав charset
, затем жестко связал страницу с ее зависимостями и наоборот.
Есть ли способ заставить браузер правильно определять набор символов этих зависимостей без указания charset
на самой странице?