Для ответов HTTP с данными символа предложения Типов контента, какой набор символов должен быть принят клиентом, если ни один не определяется?

Если никакой параметр набора символов не определяется в заголовке Типа контента, раздел RFC2616 3.7.1, кажется, подразумевает, что ISO8859-1 должен быть принят для типов среды подтипа "текст":

Когда никакой явный параметр набора символов не обеспечивается отправителем, подтипы медиа "текстового" типа определяются, чтобы иметь значение набора символов по умолчанию "ISO-8859-1" при получении через HTTP.

Данные в наборах символов кроме "ISO-8859-1" или его подмножеств ДОЛЖНЫ быть маркированы соответствующим значением набора символов.

Однако я обычно вижу приложения, которые подают файлы JavaScript со значениями Типа контента как "application/x-javascript" (т.е. никакой параметрический усилитель набора символов), даже когда эти сценарии содержат символы UTF-8 не-ASCII, которые были бы повреждены, если интерпретируется как ISO8859-1.

Это, кажется, не создает проблемы клиентам. Как клиенты знают для интерпретации байтов как UTF-8? Существует ли правило для других подтипов символьных данных, которое подразумевает, что UTF-8 должен быть значением по умолчанию? Где это документируется?

12
задан rewbs 24 February 2010 в 11:44
поделиться

5 ответов

Все основные браузеры, которые я проверял (IE, FF и Opera), полностью игнорируют спецификацию RFC в этой части.

Если вас интересует алгоритм автоматического определения кодировки по данным, посмотрите ссылку Mozilla Firefox .

Небольшое примечание о типах содержимого: Только текст имеет наборы символов . Разумно предположить, что браузеры обрабатывают application / x-javascript так же, как они обрабатывают текст / javascript (кроме IE6, но это уже другая тема).

Internet Explorer будет использовать кодировку по умолчанию (вероятно, хранящуюся в реестре), как указано:

По умолчанию Internet Explorer использует набор символов , указанный в содержимом HTTP . тип, возвращаемый сервером для определения этого перевода. Если этот параметр не задан, Internet Explorer использует набор символов , указанный в метаэлементе в документе . Он использует настройки пользователя , если не указан метаэлемент .

Источник : http://msdn.microsoft.com/en-us/library/ms537500%28VS.85%29.aspx

Mozilla Firefox пытается автоматически определить charset, как указано здесь:

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

Источник : http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html

Opera также использует автоматическое обнаружение, как описано в документации:

Если транспорт протокол предоставляет имя кодировки, которое используется. В противном случае Opera будет искать на странице объявление кодировки. Если он отсутствует, Opera попытается автоматически определить кодировку , используя имя домена, чтобы узнать, является ли сценарий сценарием CJK, и если да, то какой именно. Opera также может автоматически определять UTF-8.

Источник : http: //www.opera.com / docs / specs / opera9 /

15
ответ дан 2 December 2019 в 18:18
поделиться

Подчеркиваем очевидное: «application / x-javascript» не является подтипом «текст».

Кроме того, текст в RFC 2616 устарел. Следующая версия HTTP / 1.1 не будет определять значение по умолчанию. См. RFC 6657 для получения дополнительной информации.

0
ответ дан 2 December 2019 в 18:18
поделиться

Он немного особенный для XMLHttpRequest и описан здесь: http://www.w3.org/TR/XMLHttpRequest/

0
ответ дан 2 December 2019 в 18:18
поделиться

Как описано в RFC 4329, также application/javascript может иметь параметр charset. Другой вопрос - обработка реализаций браузеров. Извините, но не проверено.

2
ответ дан 2 December 2019 в 18:18
поделиться

RFC 4329 определяет тип носителя «application / javascript» как замену «text / javascript», «application / x-javascript», и другие подобные типы. Раздел 4.2 устанавливает кодировку символов по умолчанию как UTF-8, когда нет явного параметра «charset» и нет спецификации Unicode в начале данных.

1
ответ дан 2 December 2019 в 18:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: