По историческим причинам в нашей стране нет единого стандарта
на используемую в русскоязычных текстах кодировку. Это приводит к
тому, что иногда невозможно понять содержимое файла. В таких
случаях надо пользоваться специальными программами, которые
меняют кодировку. Надеемся, Вы выберете rusconv.
Rusconv - программа с большим количеством флагов.
Если Вы забудете какой-нибудь из них, то всегда можете получить
от rusconv текст помощи. Для этого надо либо просто запустить
rusconv без каких-либо аргументов, либо дать флаг '-h'.
Предположим, что Вы работаете в windows, достали старую
программу для DOS и пытаетесь вспомнить, как она работает.
Но "Блокнот"(Notepad) вместо описания выводит непечатные символы.
Чтобы прочитать текст, его из альтернативной кодировки, используемой
в DOS, надо перевести в кодировку windows. Делается это так:
UNIX-версия, как и большинство утилит этой системы, неразговорчивая,
и по умолчанию выводит только сообщения об ошибках. Чтобы ее
"разговорить", надо использовать флаг '-v'.
Даже то, что текст написан только латинскими буквами, не может
гарантировать, что его можно нормально читать во всех
операционных системах. В DOS и windows концы строк кодируются двумя
символами, в UNIX - одним.
Каждая операционная система создает русскоязычные тексты
по-разному.
При конвертировании rusconv создает новый файл. Но иногда
его не требуется, или нужно заменить кодировку в заданном файле.
В этом случае можно использовать флаг '-o'. Тогда
rusconv вначале создает временный файл, в котором сохраняется
результат перевода, а затем перемещает этот временный файл
на место исходного. Если в процессе работы случится ошибка,
то исходный файл остается нетронутым, а временный файл остается
на диске и содержит текст, который был переведен до возникновения
ошибки.
Иногда, особенно при создании HTML-страниц, файл надо перевести
в несколько кодировок. Например, Вы создаете текст в операционной
системе DOS, а текст на домашней страничке должен быть в кодировках
windows и КОИ. Можно запустить rusconv два раза, но лучше все сделать
сразу:
Когда надо перевести несколько файлов из одной кодировки
в другую, неудобно переводить по одному файлу. Лучше
перевести сразу всю группу. Для этого достаточно
написать их имена после флагов. Можно использовать метасимволы -
rusconv сам найдет файлы, подходящие под шаблон. В UNIX-версии
используйте метасимволы с осторожностью, причины этого можно найти
в абзаце "Задание выходной директории".
По умолчанию файлы с результатами перевода создаются в
текущей директории - обычно это та директория, из которой
запускается rusconv. Но если последним аргументом является
имя директории, то файлы будут создаваться именно в ней.
Версия 3.0 была для двух операционных систем - для DOS и UNIX.
Чтобы использовать длинные имена файлов, в версии 3.11 есть rusconv
для windows. Из-за обращения к новым функциям для работы с файлами,
его невозможно запустить на машинах, не работающих в среде
windows 95/98. Зато доступны длинные имена и сетевые файлы.
Осталось рассмотреть флаги '--', '-s', '-v', '-close' и
'-noclose'. Обычно они используются при работе в командных файлах.
Для определения кодировки в файле можно использовать
программу whatrus, которая распространяется вместе с
rusconv:
Если Вы собираетесь использовать rusconv в командных
файлах, воспользуйтесь этими советами.
Долгое время наиболее популярной была альтернативная кодировка,
которая использовалась в операционной системе MS-DOS, другое ее
название - кодовая страница 866. С наступлением эпохи Windows
первенство захватила windows-кодировка, или кодовая страница 1251
(CP-1251). Все еще сохраняет свои позиции кодировка КОИ-8 (koi8-r),
которая была очень полезна на раннем этапе становления Русского
Интернета. Изредка попадаются тексты, набранные на компьютерах
Macintosh. Предлагались и другие кодировки, но они не получили
распространения. Текст, написанный в одной кодировке,
невозможно читать в другой. Для борьбы с этим иногда
русские буквы заменяют латинскими - latinica (латиница, или
транслитерация, или волапюк). Кроме разных кодировок,
операционные системы используют разные способы кодирования конца строк.
В DOS и Windows для этого применяется два символа, в UNIX -
один символ. Из-за этого текст, созданный в UNIX, в DOS/Windows
выглядит как одна большая строка. Со всеми трудностями, связанными
с несовместимостью кодировок операционных систем, помогает справиться
rusconv.
Примеры:
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-документацией.
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
Чтобы указать, из какой кодировки переводить, надо дать один из
флагов
В следующем примере создается файл '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. Тогда для Вас этот текст
будет выглядеть как одна большая строка с забавными символами в
тех местах, где она должна быть разбита на части. Чтобы привести
текст к читаемому виду, надо дать команду
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.
Для правильного преобразования файлов приходится учитывать
как кодировку в нем, так и тип строк. Из-за этого надо писать
несколько флагов:
Из 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.
Пример:
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.
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.
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.
При использовании 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.
Если надо перевести файл, в имени которого есть пробел,
надо использовать кавычки:
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.
-- конец флагов
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', окно останется на экране и будет содержать сообщение
об ошибке.
C:\UTIL>whatrus \\comp\c\html\index.html
WIN detected.
За один раз можно распознать кодировку только в одном
файле. Если требуется только код возврата, а сообщение
не надо, используйте флаг '-s'.
При запуске программы в среде windows 95/98,
операционная система создает для whatrus отдельное окно
для вывода результата. Чтобы закрыть его, нажмите любую
клавишу. Если требуется, чтобы оно закрывалось автоматически,
используйте флаг '-s'.
Использование кодов возврата программ rusconv и whatrus
делает Ваш сценарий более интеллектуальным. Коды возврата:
Благодаря этому, не возникнет ошибки, если пользователь
даст на вход Вашему сценарию имя файла, которое rusconv
может воспринять как флаг.
Это особенно важно при работе в UNIX. В этой операционной
системе метасимволы раскрывает оболочка, и программе дается уже
готовый список файлов. При этом никто не гарантирует, что последним
элементом в списке не будет директория.
Чтобы windows не закрывало автоматически окно с сообщениями,
rusconv после завершения перевода всех файлов ждет нажатия
любой клавиши. Для командных файлов, скорее всего, такое поведение
не требуется. Поэтому используйте флаг '-close', чтобы rusconv
завершился сразу после перевода файлов.
В windows-версии программы whatrus флаг '-s' служит
для того же, что и флаг '-close' в программе rusconv.
В качестве примера приводится командный сценарий. На его вход
дается некоторый файл, который преобразуется в файл 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 года
[email protected]