Настройка параметра HTTP charset

Когда сервер отправляет документ клиентскому приложению (например, браузер), он также отправляет информацию в поле Content-Type сообщая заголовок HTTP о том, какой это тип данных. Эта информация выражается с помощью отметки MIME. Эта статья должна стать отправной точкой для тех, кто должен установить информацию о кодировке в заголовке HTTP.

В другом месте вы должны искать информацию о том, как назначить кодировку символов в HTML страницах, или узнать как проверить информацию о кодировке символов, которая отправлена в заголовок HTTP.

Параметр charset

Документы, переданные с HTTP, которые имеют следующие типы текста: text/html, text/plain, и т.д., могут послать charset параметр к заголовку HTTP, чтобы указать кодировку символов документа.

Это очень важно всегда явно отмечать Веб документы. В HTTP 1.1 говорится, что по умолчанию charset должен быть ISO-8859-1. Но есть очень много неотмеченных документов в других кодировках, поэтому когда нет явного параметра charset браузеры используют то кодирование, которое предпочитает читатель.

Обычно строка в заголовке HTTP выглядит следующим образом:

Content-Type: text/html; charset=utf-8

Теоретически, любая кодировка символов, которая была зарегистрированная IANA может использоваться, но нет браузера, который всех их понимает. Чем более широко будет использоватся кодирование символов, тем выше вероятность того, что браузер будет его понимать. Такое кодирование Unicode, как UTF-8 является хорошим выбором по ряду причин.

Установка сервера

Как сделать так, чтобы сервер посылал соответствующую charset информацию зависит от сервера. Чтобы иметь возможность изменять настройки сервера вам понадобятся соответствующие административные права.

Apache. Это можно сделать с помощью AddCharset (Apache 1.3.10 и позднейшие) или директив AddType для каталогов или отдельных ресурсов (файлов). С помощью AddDefaultCharset (Apache 1.3.12 и позднейшие), можно установить параметр charset по умолчанию для всего сервера. Дополнительные сведения смотрите в статье Настройка 'charset' информации в .htaccess.

Jigsaw. Используйте indexer в JigAdmin , чтобы связать расширения с charset, или установить charset непосредственно на ресурсе .

IIS 5 и 6. В Internet Services Manager, щелкните правой кнопкой мыши "Default Web Site" (или сайт, который нужно настроить) и перейдите к "Properties" => "HTTP Headers" => "File Types..." => "New Type...". Поставьте расширение, которое вы хотите отобразить, отдельно для каждого расширения; вероятно пользователи IIS захотят, отобразить .htm, .html,... Тогда добавьте к Content type "text/html;charset=utf-8" (без кавычек; замените желаемый вами charset на iso-8859-1; нигде не оставляйте пробелы, поскольку IIS игнорирует весь текст после пробелов). Для IIS 4, вам возможно, придется использовать "HTTP Headers" => "Creating a Custom HTTP Header" если выше указанная схема не работает.

Скриптовий заголовок

Соответствующий заголовок можно также установить в server side scripting languages (скриптовые языки сервера). Например:

Perl. Выведите правильный заголовок перед любой частью текущей страницы. После последнего заголовка, используйте двойной linebreak (разрыв строки), например:
print "Content-Type: text/html; charset=utf-8\n\n";

Python. Используйте то же решение, что и для Perl (кроме того, что в конце вам не нужно использовать точку с запятой).

PHP. Перед созданием любого контента используйте функцию header(), например:
header('Content-type: text/html; charset=utf-8');

Java Servlets. Используйте setContentType метод на ServletResponse до получения любого объекта (Stream или Writer) использованного для вывода, например:
resource.setContentType ("text/html;charset=utf-8");
Если вы используете Writer, Servlet автоматически заботится о преобразовании с Java Строк в избранное кодирование.

JSP. Используйте директиву page например:
<%@ page contentType="text/html; charset=UTF-8" %>
Выводит из out.println() или выраженные элементы (<%= object%>) автоматически превращаются в избранное кодирование. Кроме того, сама страница интерпретируется, как закодированная в этой кодировке.

ASP и ASP.Net. ContentType и charset устанавливаются независимо, и есть методы для соответствующего объекта. Чтобы установить charset, используйте например:
<%Response.charset="utf-8"%>
В ASP.Net, настройки Response.ContentEncoding будет влиять на параметр charset в HTTP Content-Type так же как отправленное фактическое кодирование документа (которое, конечно, должно быть таким же). По умолчанию может быть установлено в элементе globalization в Web.config (или Machine.config, которое первоначально установленно в UTF-8).