Pers.narod.ru. Тексты. О кодировках, Far Manager'е и переносе русского текста из листингов программ

Проблема "кракозябры"

Часто приходится отвечать на вопросы вроде "Я перенёс листинг программы с сайта в Паскаль, а все комментарии на русском языке превратились в кракозябры". Чтобы избавить себя от ответов на такое, я и написал эту небольшую статью.

Проблема состоит в том, что существует несколько кодировок текстовых файлов. Вы читаете этот документ в кодировке Windows-1251, а программы на консольном Си и Паскале, разработанных в эпоху DOS, писались в кодировке DOS-866. Прочитать минимум теории и сравнить эти кодировки можно здесь.

Теперь к практическим вопросам. Прочитать и сохранить листинг программы на Си или Паскале в "человеческом" виде можно несколькими способами.

Во-первых, стандартный Блокнот открывает и сохраняет документы в кодировках ANSI (она же Windows-1251), UTF-8 (кодовая страница 65001), Юникод (так названа разновидность Юникода UTF-16 Little Endian, кодовая страница 1200) и Юникод Big Endian (UTF-16 Big Endian, кодовая страница 1201).

Указать кодировку можно в стандартном окне открытия или сохранения файла. Чем отличаются все эти кодировки?

ANSI - это стандартная кодировка DOS и Windows, однобайтовая (т.е. 8-битовая, 1 символ кодируется 1 байтом). До появления Юкинода символы национальных алфавитов, в том числе кириллицы, "ютились" в пространстве кодов 128-255, причём, существовала масса разновидностей кодировки, отличающихся как раз тем, каким байтом какой "национальный" символ закодирован... ну да Вы уже сами прочитали по этой ссылке.

Все остальные перечисленные кодировки - разновидности Юникода, специально придуманного как "единая кодировка для всех языков".

UTF-8 - одно из "представлений" Юникода, обеспечивающее максимальную совместимость с 8-битовой кодировкой ANSI. К сожалению, "совместимость" эта не имеет отношения к кириллице и актуальна только для символов с кодами меньше 128 (цифры, знаки препинания, латиница), которые представлены 1 байтом. Один "произвольный" символ может занимать от 1 до 4 байт дискового пространства.

Поскольку в современных компьютерах 1 байт = 8 бит, то один символ в UTF-16 представлен 2 байтами. Если при сохранении документа впереди ставится младший байт символа, кодировку называют little endian (совместима с процессорами на базе x86), если впереди старший байт - это кодировка big endian (процессоры m68k, SPARC). Один символ в UTF-16 теоретически может занимать от 2 до 6 байт, чаще всего 2 байта и есть.

Блокнот ставит первыми 2 байтами документа в UTF-16 Little Endian символы FF FЕ, в UTF-16 Little Endian - байты FE FF ("метки порядка байт"), а в начало документа в UTF-8 ставит "метку" из 3 байт EF BB BF. Эти метки могут здорово помешать при переносе текста, скажем, в файл WML, HTML или какой-то ещё.

Можно в Блокноте под русифицированной версией Windows показать и документ в кодировке DOS-866 (она же OEM). Для этого достаточно в меню Формат, Шрифт выбрать шрифт Terminal - единственный DOS'овский шрифт, который "обязан" быть в стандартном комплекте Windows.

Получается, работать с листингами старых программ (DOS) или просто "разнокодированными" документами в Блокноте неудобно.

Популярных в Рунете альтернатив, причём вполне официально бесплатных, по меньшей мере, две.

1. Notepad++. Многовкладочный текстовый редактор, официальный сайт на русском - http://notepad-plus.sourceforge.net/ru/site.htm. В меню "Кодировки" можно "кодировать" и "преобразовать" текст во всё, что нужно. При этом, UTF-8 можно сделать "без BOM" - тех самых "меток" в начале файла. Встроена в редактор и поддержка стилей множества языков программирования - см. меню Стиль.

2. Far manager (ссылка будет ниже). Своего рода "клон" Norton Commander'а для Windows со встроенным текстовым редактором. В среде программистов и админов Рунета вообще есть верный критерий, отличающий "полного лоха и ламера" от хоть сколько-нибудь"продвинутого" пользователя. Последний умеет пользоваться Far (или хотя бы Total Commander).

Надеюсь, Вы без труда освоите (если ещё не освоили) перемещение по папкам с помощью Far - сочетания клавиш Alt+F1 и Alt+F2, Ctrl+\ и стандартный значок перехода на уровень выше (..) рулят. Клавиша F3 на выделенном файле открывает его для просмотра, F4 - для редактирования. В окне просмотра или редактирования клавиша F4 переключает между текстовым и бинарным представлениями файла, за клавишей F8 закреплено "быстрое" переключение между кодировками ANSI (Windows) и OEM (DOS), а Shift+F8 (с версии 2.0) вызывает расширенное окно выбора кодировки, где есть уже знакомые нам разновидности Юникода. Поддерживается и перекодировка "на лету" через буфер обмена - вырезать текст, сменить кодировку нажатием F8, вставить текст уже в новой кодировке - очень удобно.

Таким образом, для "правильного" сохранения файла с исходным текстом на Паскале или Си c Web-страницы достаточно:

Я предпочитаю именно этот файловый менеджер, поэтому скажу о его установке и настройке чуть подробней.

Об установке Far и переносе настроек Far 1.70 в Far 2.0

Изначально Far - авторский проект Евгения Рошаля, а с версии 2 это Open Source проект, который снова активно развивается.

Качаем сжатую версию с http://www.farmanager.com/download.php?l=ru (кстати, сжата она в .7z, так что если с этим форматом незнакомы, сходите ещё и сюда)

Разворачиваем архив, копируем всё в папку, скажем, C:\Program Files\Far20\ ("старый" Far был в C:\Program Files\Far\, при первой установке можно и так). Запускаем новый Far, чтобы он прописался в реестре.

Если ставите Far впервые, идите к следующему пункту, иначе читаем о переносе настроек.

Смотрим в реестре (Пуск, Выполнить, regedit, Enter) ветку HKEY_CURRENT_USER\Software\Far и переносим нужное в HKEY_CURRENT_USER\Software\Far2 (например, правая кнопка на HKEY_CURRENT_USER\Software\Far\Plugins\FTP, "Экспортировать", записать ветку в файл *.reg, заменить в файле слово Far на Far2, выполнить файл .reg).

Совместимость плагинов есть, так что можно скопировать нужное из C:\Program Files\Far\Plugins\ в C:\Program Files\Far20\Plugins\ (мне понадобился, собственно, лишь WinSCP, остальное не обязательно).

Соблазнили меня, главным образом, 2 простые вещи - работа с Unicode в редакторе или вьюере (Shift+F8) и то, что консоль Far теперь нормально разворачивается/сворачивается стандартной кнопкой размера окна :)

Установка Colorer под Far 2.0

Colorer - удобный плагин для подсветки синтаксиса в различных файлах. Ядро его написано давно и приходится слышать о проблемах с установкой.

Я поставил так:
Скачать плагин:
http://plugring.farmanager.com/downld/files/colorer4ever.far.rar
развернуть в
C:\Program Files\Far20\Plugins\Colorer\
Это будет папкой плагина.
Скачать библиотеку:
http://plugring.farmanager.com/downld/files/colorer4ever.lib.rar
и развернуть её, потом кинуть из нее папки hrc и hrd в папку плагина (можно скинуть и все другие файлы библиотеки, пересечений по именам с плагином нет, но тогда не забудьте выполнить bin\install.exe, который пропишет нужные для работы с библиотекой ключи в реестре).
Перезапустить Far.
Результат - подсветка во встроенном редакторе синтаксиса Си, Паскаля, HTML и т.д.

Рейтинг@Mail.ru
вверх гостевая; E-mail
Hosted by uCoz