Налаштування параметру 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).