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-страницы достаточно:
Shift+F4
в окне папки, ввести
совместимое с DOS имя файла
с расширением .pas
или .cpp
, нажать Enter);
F8
переключиться на кодировку DOS (в верхней строке редактора после имени файла должно быть написано 866);
Ctrl+V
вставить из буфера обмена текст, который Вы перед этим выделили на странице и скопировали через Ctrl+C
;
Enter
сохранение документа.
Я предпочитаю именно этот файловый менеджер, поэтому скажу о его установке и настройке чуть подробней.
Изначально 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 - удобный плагин для подсветки синтаксиса в различных файлах. Ядро его написано давно и приходится слышать о проблемах с установкой.
Я поставил так:
Скачать плагин:
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 и т.д.
гостевая; E-mail |