Table of Contents:

Основные принципы работы с кодировками:

  1. В каждой операционной системе должна оставаться та локальная кодировка, которая там себя хорошо зарекомендовала исторически, вплоть до полной победы Unicode

    Проблема несовпадения кодировок должна решаться автоматическим (без участия человека) перекодированием на уровне приложения (броузера), возможно, с использованием системных механизмов, но не заменой текущей локализации.

    Говоря проще: ни в Unix нельзя ставить кодировку windows-1251, ни в Windows кодировку KOI8-R (в качестве решения, а не временного хака), несоблюдение этого простого условия приводит к тяжким последствиям, путанице и массе лишних операций.

  2. На каждой русской HTML-страничке должна быть проставлена кодировка параметром charset= (в HTTP заголовке или в самой страничке). Заметьте - любая русская кодировка должна быть проставлена. Есть подробная инструкция о том, как это сделать применительно к кодировке KOI8-R.

  3. На WWW не должно быть никаких меню по типу "Выберите вашу кодировку", это задача броузера, а не пользователя, совершенно автоматическая операция. Броузер может его выполнить только при наличии параметра charset= из пункта 2), т.н. "эвристические" методы угадывания способны лишь позабавить порой, для использования же не пригодны.

  4. Правильный броузер работает внутри в Unicode , поэтому ему всё равно, в какой кодировке была первоначальная страница, KOI8-R, windows-1251, или что-нибудь ещё, лишь бы у него были таблицы соответствия между Unicode и этими кодировками, а также на самой страничке эта кодировка была бы проставлена для автоматического распознавания, см. 2). Правильный броузер либо обязан сообщать серверу обо всех ему известных кодировках через HTTP заголовок Accept-Charset, либо понимать все зарегистрированные кодировки. Т.к. последнее маловероятно, практически остаётся только вариант с Accept-Charset.

  5. После преобразования в Unicode из 4) броузер выдаёт всё пользователю в локальной кодировке, принятой в данной операционной системе, см. 1).

Вышесказанное означает, что совершенно всё равно, в какой кодировке пользователь делает свои странички, он должен её проставить (см. 2)), а те, кто её не видят, могут потребовать от компании производителя броузера поддержки пункта 4).

Ещё проще: пишите хоть в KOI8-R, хоть в windows-1251, но следите за тем, чтобы кодировка была всегда проставлена.

На этом часть, касающаяся пользователей, заканчивается, всё дальнейшее имеет уже отношение к провайдерам или веб-администраторам, просто потому, что совершенно прозрачно (не касается и незаметно) для пользователя.

Сетевая кодировка

Речь пойдёт не столько об стандартах и правилах, сколько об удобстве (в рамках стандартов). Иметь одну сетевую кодировку удобнее по многим причинам, к примеру, проще склонить производителей софта её поддержать. Сетевая кодировка как понятие не имеет никакого отношения к локальной кодировке, это форма представления информации в канале передачи данных. К примеру, пользователь кладёт свои странички в windows-1251, а провайдер выдаёт их в KOI8-R (конечно, кроме тех случаев, когда существенно используются неконвертируемые особенности windows-1251).

Если рассматривать WWW изолированно, то любая кодировка была бы возможной, в т.ч. и windows-1251, однако выбор сетевой кодировки определяется исходя из содержимого всей сети, а не только WWW, то есть ещё и FTP, News, Mail, Gopher, IRC. Возьмём объём документов в определённой кодировке по каждому сервису отдельно, а теперь скажите мне, какой процент сообщений в windows-1251 в конференциях по сравнению с KOI8-R? Такой подход не отрицание значимости WWW по сравнению с другими сервисами, а облегчение возможности интеграции всех сервисов в WWW.

Иногда в качестве аргумента за windows-1251 приводится наличие в ней дополнительных типографских символов, при этом забывают, что мы рассматриваем не отдельно взятую типографию под MS Windows, а сеть разнородных операционных систем и машин плюс множество разнородных сетевых сервисов, для такого случая надо выбрать и реализовать разумное подмножество всех символов языка, а не некий идеальный набор на все случаи, которым не является и windows-1251. В качестве такого подмножества вполне годится предлагаемая KOI8-R.

В качестве другого аргумента приводят также и мнение, что в windows-1251 русские буквы расположены в алфавитном порядке и это облегчает сортировку. Во-первых, в windows-1251 не все русские буквы расположены в алфавитном порядке, так что толку от этого никакого. Во вторых, для сортировки обычно используется описание порядка символов, аналогичное POSIX collate, сложность применения и скорость работы с ним будут одинаковы для обеих кодировок.

Подробности и обоснования смотрите в разделе по написанию русских HTML документов (англ.), можете ознакомиться с моими впечатлениями по поводу текущего положения вещей в русскоязычной паутине и предварительным исследованием.

Полезный ресурс о локализации, кодировках, символах и т.п. - Локализация, как она есть .