Языков и языковых групп с разными начертаниями букв и письменностью в целом мире великое множество. Поэтому в свое время было принято решение создать для каждого языка свою таблицу символов, где определенной букве был присвоен свой номер. Младшие 128 ячеек этих таблиц (в каждой ячейке одна буква) всегда одинаковы и соответствуют символам латиницы. Для кодирования букв нелатинского алфавита отводятся старшие 128 значений из 256 возможных, вмещаемых в один байт.
Исторически сложилось так (в основном вследствие вредного явления конкуренции в мире империализма), что на свет появились и были более-менее стандартизованы пять кодировок русских букв: koi8-r (Unix-подобные операционные системы), dos (MS DOS, Microsoft), mac (Mac OS, Apple), win (Windows 3.0, Microsoft), iso-8859-5 (ISO — международная организация по стандартам). При этом mac и win очень похожи, а iso-8859-5 почти не используется.
Сложность отображения литер заключается в следующем. Пусть буква «Б» имеет порядковый номер 209 в таблице win. Тогда, если в тексте встречается символ с таким кодом и программа настроена на win-кодировку, вы увидите правильное отображение этой буквы. Если же, к примеру, в текущей конфигурации редактора текста определена таблица koi, то вместо буквы «Б» на экране появится «а» (именно так должен отображаться символ с кодом 209 в koi-представлении). Соответственно и все остальные буквы будут заменены на другие символы.
Затронутая проблема имеет старые корни, и на данный момент найдено решение, позволяющее ее обойти. Если бы удалось создать единую таблицу, описывающую любые возможные буквы всех алфавитов, тогда не нужно было бы прибегать к перекодировкам.
Этому требованию удовлетворяет стандарт unicode (от слова «универсальный»). В нем каждый символ кодируется не одним, а двумя байтами. Таким образом, если приложение поддерживает unicode, то в два байта (65 536 разных символов) можно запихнуть определение русских, украинских букв и даже хинди. Кстати, Microsoft, начиная с MS Office 97, пошла именно по этому пути.
Существует и другой способ кодирования символов unicode, названный utf-8, — в нем одной букве могут соответствовать один или несколько байтов (до шести). Причем этот способ дает заметный выигрыш в размере документов, если в нем используются только цифры и буквы английского алфавита (в этом случае символы utf-8 совпадают с символами us-ascii, под которые отводится всего один байт).
Если приложение и соответственно формат сохраняемых файлов не поддерживает unicode или utf-8 (например, почтовые программы, простейшие текстовые редакторы), проблемы с отображением русских букв всегда будут беспокоить пользователей. Скажем, правила провайдера услуг Web-хостинга регламентируют хранение документов на сервере в кодировке koi. Как же поступать в том случае, когда под рукой нет ничего специального, а все же необходимо получить читаемый текст в требуемой кодировке?!
На помощь приходит очень распространенная среди пользователей Windows текстово-файловая оболочка Far Manager, построенная по принципам незабвенного Norton Commander. Евгений Рошал, автор Far Manager, провозгласил свой продукт бесплатным и свободно распространяемым для постсоветского пространства, чем заслужил благодарность и уважение людей, связанных с миром компьютеров (www.farmanager.com). На данный момент (середина 2002 г.) номер последней стабильной версии — 1.65.
Итак, подготовить Far к просмотру и редактированию разных кодировок можно следующим образом. Нужно найти каталог FarAddons TablesRussian, расположенный по умолчанию в c:Program Files, и нажать
Теперь помимо поддерживаемых по умолчанию dos (кодовая страница 866, cp866) и win (кодовая страница 1251, cp1251) Far будет понимать и таблицу koi.
Просмотр содержимого файлов осуществляется нажатием клавиши
Для конвертации документа из кодировки win в koi нужно совершить следующие действия:
- Открыть файл на редактирование (
), установить "читаемость" русских букв . - Выделить весь текст (установив курсор в самое начало, удерживая клавишу
, нажать несколько раз ). - Вырезать выделенный текст в буфер обмена (
). - Поменять текущую кодировку на требуемую (
и выбрать koi-8). - Вставить текст из буфера обмена (
). - Сохранить документ (
). - Выделить весь текст (установив курсор в самое начало, удерживая клавишу
Как свидетельствует опыт, при некотором навыке эти действия могут выполняться за две-три секунды.
Более сложный случай — раскодировать письмо, пришедшее в непонятной кодировке. Обычно на практике такой казус случается из-за неправильно установленного поля charset в заголовках письма. Признак раскодируемости текста — наличие разных (!), пусть даже нечитаемых, символов внутри него. Скажем, в результате трансформаций на отправляющей и принимающей стороне текст письма получился перекодированным два раза. Значит, нам необходимо провести декодирование в обратной последовательности. Если было win-koi и koi-dos, то нужно выполнить трансформацию dos-koi и koi-win. Но в принципе об этом даже задумываться не стоит. Алгоритм действий универсален для любых случаев двойной перекодировки:
- Открыть письмо, скопировать в буфер обмена нечитаемый текст, перейти в Far, создать новый файл нажатием
; - Установить текущую кодировку (все равно в какой последовательности).
- Вставить (
) текст из буфера обмена. - Повторить пункты 2, 3 три раза для кодировок dos, win, koi.
- Скопировать (
) все содержимое файла в буфер обмена, запомнив текущую кодировку. - Вставить (Ctrl+V) текст из буфера обмена в конец файла два раза, предварительно сменив кодировку на одну из оставшихся.
Выполнив все эти действия, мы получим девять кусочков по-разному закодированного начального текста. Теперь, переключаясь между кодировками нажатием