Tutorial
Учебник по rusconv v.3.11.
По историческим причинам в нашей стране нет единого стандарта на используемую в русскоязычных текстах кодировку. Это приводит к тому, что иногда невозможно понять содержимое файла. В таких случаях надо пользоваться специальными программами, которые меняют кодировку. Надеемся, Вы выберете rusconv.
Долгое время наиболее популярной была альтернативная кодировка, которая использовалась в операционной системе MS-DOS, другое ее название - кодовая страница 866. С наступлением эпохи Windows первенство захватила windows-кодировка, или кодовая страница 1251 (CP-1251). Все еще сохраняет свои позиции кодировка КОИ-8 (koi8-r), которая была очень полезна на раннем этапе становления Русского Интернета. Изредка попадаются тексты, набранные на компьютерах Macintosh. Предлагались и другие кодировки, но они не получили распространения. Текст, написанный в одной кодировке, невозможно читать в другой. Для борьбы с этим иногда русские буквы заменяют латинскими - latinica (латиница, или транслитерация, или волапюк). Кроме разных кодировок, операционные системы используют разные способы кодирования конца строк. В DOS и Windows для этого применяется два символа, в UNIX - один символ. Из-за этого текст, созданный в UNIX, в DOS/Windows выглядит как одна большая строка. Со всеми трудностями, связанными с несовместимостью кодировок операционных систем, помогает справиться rusconv.
Содержание:
Вывод текста помощи.
Перевод файла из одной кодировки в другую.
Изменение типов концов строк.
Сокращения для часто используемых наборов флагов.
Перезаписывание файлов.
Перевод сразу в несколько кодировок и задание своих расширений для файлов.
Перевод сразу нескольких файлов.
Задание выходной директории.
Использование длинных имен файлов и сетевых файлов.
Остальные флаги.
Как определить кодировку файла.
Использование rusconv в командных файлах.
Вывод текста помощи.
Rusconv - программа с большим количеством флагов. Если Вы забудете какой-нибудь из них, то всегда можете получить от rusconv текст помощи. Для этого надо либо просто запустить rusconv без каких-либо аргументов, либо дать флаг '-h'.
Примеры:
DOS: C:\UTIL>RUSCONV C:\UTIL>rusconv /h UNIX: $rusconv -h $rusconv
В операционной системе windows использовать rusconv сложнее. Желательно работать в какой-нибудь оболочке типа Norton Commander (рекомендую Windows Commander). Тогда использование rusconv в windows ничем не отличается от его использования в DOS. В любом случае, rusconv можно запустить из меню "Пуск". В этом меню надо выбрать "Выполнить...", написать полный путь к программе (проще воспользоваться кнопкой "Обзор..."), добавить необходимые ключи и имена файлов и нажать кнопку "OK".
UNIX-версия rusconv, как и большинство утилит этой операционной системы, неразговорчива. В ней выдается только список флагов. Для получения дополнительных сведений можно дать команду
$man rusconv
Еще лучше воспользоваться HTML-документацией.
Перевод файла из одной кодировки в другую.
Предположим, что Вы работаете в windows, достали старую программу для DOS и пытаетесь вспомнить, как она работает. Но "Блокнот"(Notepad) вместо описания выводит непечатные символы. Чтобы прочитать текст, его из альтернативной кодировки, используемой в DOS, надо перевести в кодировку windows. Делается это так:
C:\GAMES\WARCRAFT>rusconv -alt +win read.me
** rusconv -- convertor of Russian codepages, v.3.11. ** (c)w_re -- Oleg A. Paraschenko http://beta.math.spbu.ru/~prof/w_re/ .\read.me -> .\read.win: ok. 1 file(s) converted.
В результате в текущей директории (обычно это та, откуда запущен rusconv, в данном примере - c:\games\warcraft) создается файл с тем же именем, что и у исходного файла, но с другим расширением, которое показывает, какая кодировка в файле.
Вот список, какое расширение какой кодировке соответствует:
.alt - альтернативная кодировка, используется в DOS .koi - кодировка КОИ-8, используется в UNIX .lat - латиница, русский текст латинскими буквами .mac - кодировка Macintosh .win - кодировка Windows
Чтобы указать, из какой кодировки переводить, надо дать один из флагов
-alt, -koi, -mac или -win.
Rusconv не переводит из латиницы. Чтобы указать, в какую кодировку переводить, надо дать один из флагов
+alt, +koi, +lat, +mac или +win.
UNIX-версия, как и большинство утилит этой системы, неразговорчивая, и по умолчанию выводит только сообщения об ошибках. Чтобы ее "разговорить", надо использовать флаг '-v'.
В следующем примере создается файл 'test.file', содержащий строку "Проверка флага '-v'.". Файл будет в кодировке КОИ-8, используемой в UNIX. Вначале мы переводим его в кодировку windows, при этом флаг '-v' не используем. Будет создан файл 'test.win', но rusconv на экран ничего не выдаст. Затем мы переводим файл в латиницу, используя этот флаг, и проверяем результаты конвертирования.
$echo Проверка флага '-v'. >test.file
$rusconv -koi +win test.file
$rusconv -v -koi +lat test.file
** rusconv -- convertor of Russian codepages, v.3.11. ** (c)w_re -- Oleg A. Paraschenko http://beta.math.spbu.ru/~prof/w_re/ ./test.file -> ./test.lat: ok. 1 file(s) converted. $cat test.lat
Proverka flaga '-v'.
Изменение типов концов строк.
Даже то, что текст написан только латинскими буквами, не может гарантировать, что его можно нормально читать во всех операционных системах. В DOS и windows концы строк кодируются двумя символами, в UNIX - одним.
Допустим, Вы работаете в DOS или windows и скачали из Интернета текст, созданный в UNIX. Тогда для Вас этот текст будет выглядеть как одна большая строка с забавными символами в тех местах, где она должна быть разбита на части. Чтобы привести текст к читаемому виду, надо дать команду
C:\NEW>rusconv -cr2crlf readme.txt
** rusconv -- convertor of Russian codepages, v.3.11. ** (c)w_re -- Oleg A. Paraschenko http://beta.math.spbu.ru/~prof/w_re/ .\readme.txt -> .\readme.crlf: ok. 1 file(s) converted.
Результат преобразования будет содержаться в файле с таким же именем и расширением .crlf (UNIX и windows) или .crl (DOS). В данном примере - в файле 'readme.crlf'.
В UNIX при использовании неправильного формата файлов тоже возникает подобная проблема. На концах строк текстовые редакторы выводят лишний символ, некоторые программы из-за этого символа не компилируются. Чтобы исправить положение, используйте флаг '-crlf2cr':
$rusconv -crlf2cr -v files.bbs
** rusconv -- convertor of Russian codepages, v.3.11. ** (c)w_re -- Oleg A. Paraschenko http://beta.math.spbu.ru/~prof/w_re/ ./files.bbs -> ./files.cr: ok. 1 file(s) converted.
Сокращения для часто используемых наборов флагов.
Каждая операционная система создает русскоязычные тексты по-разному.
- Кодировка - альтернативная (cp866).
- Конец строки - два символа.
DOS:
Windows:
UNIX:
Для правильного преобразования файлов приходится учитывать как кодировку в нем, так и тип строк. Из-за этого надо писать несколько флагов:
Из DOS в UNIX : -alt +koi -crlf2cr
Из UNIX в DOS : -koi +alt -cr2crlf
Из windows в UNIX : -win +koi -crlf2cr
Из UNIX в windows : -koi +win -cr2crlf
Из DOS в windows : -alt +win
Из windows в DOS : -win +alt
Вероятно, наиболее часто приходится переносить тексты из UNIX в DOS и обратно, а в последнее время - из UNIX в windows и обратно. Преобразовывать файлы из DOS-формата в windows-формат и наоборот обычно не требуется - для windows-текстов можно использовать Notepad, а для просмотра DOS-текстов достаточно запустить программу типа Norton Commander.
Чтобы не набирать постоянно стандартные наборы флагов, rusconv предлагает использовать сокращения для них:
-dos2unix - то же самое, что '-alt +koi -crlf2cr' -unix2dos - то же самое, что '-koi +alt -cr2crlf' -win2unix - то же самое, что '-win +koi -crlf2cr' -unix2win - то же самое, что '-koi +win -cr2crlf'
Эти сокращения легки в использовании, но и они могут показаться слишком длинными. Поэтому есть еще более короткие сокращения:
-d2u - то же самое, что '-dos2unix' -u2d - то же самое, что '-unix2dos' -w2u - то же самое, что '-win2unix' -u2w - то же самое, что '-unix2win'
rusconv -w2u index.html
** rusconv -- convertor of Russian codepages, v.3.11. ** (c)w_re -- Oleg A. Paraschenko http://beta.math.spbu.ru/~prof/w_re/ .\index.html -> .\index.koi: ok. 1 file(s) converted.
Перезаписывание файлов.
При конвертировании rusconv создает новый файл. Но иногда его не требуется, или нужно заменить кодировку в заданном файле. В этом случае можно использовать флаг '-o'. Тогда rusconv вначале создает временный файл, в котором сохраняется результат перевода, а затем перемещает этот временный файл на место исходного. Если в процессе работы случится ошибка, то исходный файл остается нетронутым, а временный файл остается на диске и содержит текст, который был переведен до возникновения ошибки.
Пример:
D:\HTML>rusconv -o -w2u index.html
** rusconv -- convertor of Russian codepages, v.3.11. ** (c)w_re -- Oleg A. Paraschenko http://beta.math.spbu.ru/~prof/w_re/ .\index.html -> D:\HTML\rcA290.TMP -> .\index.html: ok. 1 file(s) converted.
Перевод сразу в несколько кодировок и задание своих расширений для файлов.
Иногда, особенно при создании HTML-страниц, файл надо перевести в несколько кодировок. Например, Вы создаете текст в операционной системе DOS, а текст на домашней страничке должен быть в кодировках windows и КОИ. Можно запустить rusconv два раза, но лучше все сделать сразу:
C:\HTML>rusconv -alt +koi +win index-pre.html ** rusconv -- convertor of Russian codepages, v.3.11. ** (c)w_re -- Oleg A. Paraschenko http://beta.math.spbu.ru/~prof/w_re/ .\index-pre.html -> .\index-pre.koi, .\index-pre.win: ok. 1 file(s) converted.
Результат находится в файлах с тем же именем и с расширениями по умолчанию:
.alt - для альтернативной кодировки .koi - для кодировки КОИ-8 .lat - для латиницы .mac - для кодировки Macintosh .win - для кодировки Windows
Часто расширения по умолчанию являются неудобными. Тогда можно задать свои расширения. Для этого надо использовать команды:
-aext расширение - для альтернативной кодировки -kext расширение - для кодировки КОИ-8 -lext расширение - для латиницы -mext расширение - для кодировки Macintosh -wext расширение - для кодировки Windows
Допустим, Вы набрали русский алфавит в кодировке windows и хотите узнать, как он выглядит во всех остальных кодировках. При этом желательно, чтобы результат находился в текстовых файлах. Это возможно так:
E:\EX>dir
Содержимое папки E:\EX . <ПАПКА> 24.10.98 15:27 . .. <ПАПКА> 24.10.98 15:27 .. ALPHABET TXT 66 02.10.98 13:15 alphabet.txt
E:\EX>rusconv -win +alt -aext alt.txt +koi -kext koi.txt +lat -lext lat.txt +mac -mext mac.txt +win -wext win.txt alphabet.txt
** rusconv -- convertor of Russian codepages, v.3.11. ** (c)w_re -- Oleg A. Paraschenko http://beta.math.spbu.ru/~prof/w_re/ .\alphabet.txt -> .\alphabet.alt.txt, .\alphabet.koi.txt, .\alphabet.mac.txt, .\alphabet.lat.txt, .\alphabet.win.txt: ok. 1 file(s) converted.
E:\EX>dir
Содержимое папки E:\EX . <ПАПКА> 24.10.98 15:27 . .. <ПАПКА> 24.10.98 15:27 .. ALPHAB~1 TXT 66 24.10.98 16:24 alphabet.alt.txt ALPHAB~2 TXT 66 24.10.98 16:24 alphabet.koi.txt ALPHAB~3 TXT 66 24.10.98 16:24 alphabet.mac.txt ALPHAB~4 TXT 82 24.10.98 16:24 alphabet.lat.txt ALPHAB~5 TXT 66 24.10.98 16:24 alphabet.win.txt ALPHABET TXT 66 02.10.98 13:15 alphabet.txt
Если Вы хотите поменять расширение у файлов с результатами, то для этого надо давать одну из команд 'aext', 'kext', 'lext', 'mext' или 'wext'. Но при переводе только в одну кодировку лучше воспользоваться командой
-ext расширение
В зависимости от того, в какую кодировку Вы переводите, эта команда воспринимается как одна из команд '-aext расширение', '-kext расширение', '-lext расширение', '-mext расширение' или '-wext расширение'.
С помощью команды '-ext' можно также переопределить стандартные расширения '.cr' и '.crlf', используемые при изменении типов концов строк в файлах:
E:\EX>rusconv -cr2crlf unixtext
** rusconv -- convertor of Russian codepages, v.3.11. ** (c)w_re -- Oleg A. Paraschenko http://beta.math.spbu.ru/~prof/w_re/ .\unixtext -> .\unixtext.crlf: ok. 1 file(s) converted.
E:\EX>rusconv -cr2crlf -ext txt unixtext
** rusconv -- convertor of Russian codepages, v.3.11. ** (c)w_re -- Oleg A. Paraschenko http://beta.math.spbu.ru/~prof/w_re/ .\unixtext -> .\unixtext.txt: ok. 1 file(s) converted.
Перевод сразу нескольких файлов.
Когда надо перевести несколько файлов из одной кодировки в другую, неудобно переводить по одному файлу. Лучше перевести сразу всю группу. Для этого достаточно написать их имена после флагов. Можно использовать метасимволы - rusconv сам найдет файлы, подходящие под шаблон. В UNIX-версии используйте метасимволы с осторожностью, причины этого можно найти в абзаце "Задание выходной директории".
C:\HTML>rusconv -alt +koi +win -kext koi.html -wext win.html *.txt
** rusconv -- convertor of Russian codepages, v.3.11. ** (c)w_re -- Oleg A. Paraschenko http://beta.math.spbu.ru/~prof/w_re/ .\rusconv.txt -> .\rusconv.koi.html, .\rusconv.win.html: ok. .\readme.txt -> .\readme.koi.html, .\readme.win.html: ok. .\index.txt -> .\index.koi.html, .\index.win.html: ok. 3 file(s) converted.
Задание выходной директории.
По умолчанию файлы с результатами перевода создаются в текущей директории - обычно это та директория, из которой запускается rusconv. Но если последним аргументом является имя директории, то файлы будут создаваться именно в ней.
При использовании UNIX-версии rusconv будьте осторожны с метасимволами. В этой операционной системе метасимволы раскрывает оболочка, и программе дается уже готовый список файлов. При этом никто не гарантирует, что последним элементом в списке не будет директория. Поэтому, на всякий случай, явно указывайте выходную директорию:
Содержимое текущей директории: $ls -l
-rwxr-xr-x 1 w_re w_re 21394 Oct 25 02:27 file1.html -rwxr-xr-x 1 w_re w_re 21394 Oct 25 02:27 file2.html drwxr-xr-x 2 w_re w_re 1024 Oct 25 02:27 res
Скорее всего, ошибка: $rusconv -v -w2u *
// После раскрытия метасимволов оболочкой: // rusconv -v -w2u file1.html file2.html res ** rusconv -- convertor of Russian codepages, v.3.11. ** (c)w_re -- Oleg A. Paraschenko http://beta.math.spbu.ru/~prof/w_re/ ./file1.html -> res/file1.koi: ok. ./file2.html -> res/file2.koi: ok. 2 file(s) converted.
Чтобы файлы создавались в текущей директории: $rusconv -v -w2u * .
// После раскрытия метасимволов оболочкой: // rusconv -v -w2u file1.html file2.html res . ** rusconv -- convertor of Russian codepages, v.3.11. ** (c)w_re -- Oleg A. Paraschenko http://beta.math.spbu.ru/~prof/w_re/ warning: 'res' is a directory, skipping. ./file1.html -> ./file1.koi: ok. ./file2.html -> ./file2.koi: ok. 2 file(s) converted.
Использование длинных имен файлов и сетевых файлов.
Версия 3. 0 была для двух операционных систем - для DOS и UNIX. Чтобы использовать длинные имена файлов, в версии 3.11 есть rusconv для windows. Из-за обращения к новым функциям для работы с файлами, его невозможно запустить на машинах, не работающих в среде windows 95/98. Зато доступны длинные имена и сетевые файлы.
Если надо перевести файл, в имени которого есть пробел, надо использовать кавычки:
C:\HTML>rusconv -win +alt "long file name.txt"
** rusconv -- convertor of Russian codepages, v.3.11. ** (c)w_re -- Oleg A. Paraschenko http://beta.math.spbu.ru/~prof/w_re/ .\long file name.txt -> .\long file name.alt: ok. 1 file(s) converted.
Большинство оболочек для windows, похожих на Norton Commander, при нажатии клавиш Ctrl+Enter добавляют в командную строку имя файла. Имена файлов, содержащие пробелы, автоматически окружаются кавычками. Если это не так, то надо заменить оболочку. Мы рекомендуем Windows Commander.
При работе в локальной windows-сети можно (если есть права) переводить файлы на другом компьютере без предварительного подключения сетевого диска. Для этого нужно использовать универсальные имена файлов (\\сервер\ресурс\файл):
rusconv -w2u -ext html \\comp\c\html\*.html "\\comp\c\html\koi version"
** rusconv -- convertor of Russian codepages, v.3.11. ** (c)w_re -- Oleg A. Paraschenko http://beta.math.spbu.ru/~prof/w_re/ \\comp\c\html\tutorial.html -> \\comp\c\html\koi version\tutorial.html: ok. \\comp\c\html\index.html -> \\comp\c\html\koi version\index.html: ok. \\comp\c\html\errors.html -> \\comp\c\html\koi version\errors.html: ok. 3 file(s) converted.
Остальные флаги.
Осталось рассмотреть флаги '--', '-s', '-v', '-close' и '-noclose'. Обычно они используются при работе в командных файлах.
-- конец флагов
Rusconv просматривает аргументы слева направо. Первый аргумент, не являющийся флагом, начинает список файлов для перевода. За флаг rusconv считает аргумент, начинающийся с символа '-' или '+' (или '/' в DOS и windows-версиях). Иногда требуется насильно прервать в некотором месте интерпретацию флагов. В этом случае используется сочетание символов '--'. Все, что стоит после него - имена файлов для перевода.
Допустим, файл с именем '-file.txt' надо перевести из windows-кодировки в КОИ-8:
Неправильно: E:\EX>rusconv -win +koi -file.txt
** rusconv -- convertor of Russian codepages, v.3.11. ** (c)w_re -- Oleg A. Paraschenko http://beta.math.spbu.ru/~prof/w_re/ error: unrecognized flag '-file.txt'. try 'rusconv -h' or read the manual for help.
Правильно: rusconv -win +koi -- -file.txt
** rusconv -- convertor of Russian codepages, v.3.11. ** (c)w_re -- Oleg A. Paraschenko http://beta.math.spbu.ru/~prof/w_re/ .\-file.txt -> .\-file.koi: ok. 1 file(s) converted.
-s работа без вывода сообщений на экран -v вывод всех сообщений на экран
Флаг '-s' подавляет любой вывод на экран. Флаг '-v', наоборот, делает rusconv разговорчивым. Если задать одновременно и '-s', и '-v', то будет выведено сообщение об ошибке. DOS и windows-версии по умолчанию разговорчивые. UNIX-версия по умолчанию выводит только сообщения об ошибках.
-close позволять windows закрывать окно с результатами работы rusconv -noclose оставлять окно на экране
Эти флаги имеют смысл только в windows-версии, в остальных версиях они игнорируются. При запуске программы операционная система windows создает для rusconv отдельное окно. Если задан флаг '-close', то это окно закрывается сразу после завершения перевода файлов. По умолчанию, или если задан флаг '-noclose', окно с результатами работы остается на экране. Чтобы его закрыть, можно нажать любую клавишу. Если одновременно написать и '-close', и '-noclose', окно останется на экране и будет содержать сообщение об ошибке.
Как определить кодировку файла.
Для определения кодировки в файле можно использовать программу whatrus, которая распространяется вместе с rusconv:
C:\UTIL>whatrus \\comp\c\html\index.html
WIN detected.
За один раз можно распознать кодировку только в одном файле. Если требуется только код возврата, а сообщение не надо, используйте флаг '-s'.
При запуске программы в среде windows 95/98, операционная система создает для whatrus отдельное окно для вывода результата. Чтобы закрыть его, нажмите любую клавишу. Если требуется, чтобы оно закрывалось автоматически, используйте флаг '-s'.
Использование rusconv в командных файлах.
Если Вы собираетесь использовать rusconv в командных файлах, воспользуйтесь этими советами.
- Ставьте сочетание символов '--' после флагов.
Благодаря этому, не возникнет ошибки, если пользователь даст на вход Вашему сценарию имя файла, которое rusconv может воспринять как флаг. - Явно указывайте выходную директорию.
Это особенно важно при работе в UNIX. В этой операционной системе метасимволы раскрывает оболочка, и программе дается уже готовый список файлов. При этом никто не гарантирует, что последним элементом в списке не будет директория. - При работе с windows-версией указывайте флаг '-close'.
Чтобы windows не закрывало автоматически окно с сообщениями, rusconv после завершения перевода всех файлов ждет нажатия любой клавиши. Для командных файлов, скорее всего, такое поведение не требуется. Поэтому используйте флаг '-close', чтобы rusconv завершился сразу после перевода файлов. - При работе с windows-версией whatrus указывайте флаг '-s'.
В windows-версии программы whatrus флаг '-s' служит для того же, что и флаг '-close' в программе rusconv. - Используйте коды возврата программ rusconv и whatrus.
Использование кодов возврата программ rusconv и whatrus делает Ваш сценарий более интеллектуальным. Коды возврата:
- Количество переведенных файлов.
- 255 -
произошла ошибка - 0 -
кодировка не распознана. - 11 -
альтернативная кодировка - 12 -
кодировка КОИ-8 - 13 -
кодировка windows - 14 -
кодировка Macintosh
rusconv:
whatrus:
В качестве примера приводится командный сценарий. На его вход дается некоторый файл, который преобразуется в файл index.html в кодировке windows.
windows-версия, makeindex.bat:
@ECHO OFF
REM Копируем исходный файл в файл с именем 'index'. ECHO COPY %1 index copy %1 index IF EXIST index GOTO TAKEENC ECHO copy failed EXIT
REM Узнаем кодировку, в которой создан файл. :TAKEENC ECHO WHATRUS -s %1 whatrus -s %1
REM Определение кода возврата начинаем с больших чисел, так как REM 'IF ERRORLEVEL = N' на самом деле воспринимается как REM 'IF ERRORLEVEL >= N'. IF ERRORLEVEL = 255 GOTO WRERR IF ERRORLEVEL = 14 GOTO MACENC IF ERRORLEVEL = 13 GOTO WINENC IF ERRORLEVEL = 12 GOTO KOIENC IF ERRORLEVEL = 11 GOTO ALTENC ECHO encoding not recognized EXIT
REM Сообщение об ошибке при исполнении whatrus. :WRERR ECHO whatrus failed EXIT
REM Конвертируем файл index в index.html. :ALTENC ECHO RUSCONV -close -alt +win -ext html index rusconv -close -alt +win -ext html index EXIT :KOIENC ECHO RUSCONV -close -alt +win -ext html index rusconv -close -koi +win -ext html index EXIT :MACENC ECHO RUSCONV -close -alt +win -ext html index rusconv -close -mac +win -ext html index EXIT :WINENC ECHO RUSCONV -win -alt +win -ext html index rusconv -close -alt +win -ext html index EXIT
UNIX-версия для bash, makeindex.sh:
# Копируем исходный файл в файл с именем 'index'. rm -f index cp $1 index if [ ! -f index ] then echo copy failed exit fi
# Узнаем кодировку в файле и конвертируем его в файл index.html whatrus $1 case $? in 255) echo error executing whatrus;; 0) can''t detect encoding;; 11) rusconv -alt +win -ext html index;; 12) rusconv -koi +win -ext html index;; 13) rusconv -win +win -ext html index;; 14) rusconv -mac +win -ext html index;; esac
Приятной работы!
tutorial.html
Документ создан Паращенко Олегом
Последние изменения - 15 ноября 1998 года