LINUX.ORG.RU

Конвертирование исходников из кодировки CP866.

 


0

1

Здравствуйте.

У меня есть ряд файлов-исходников на Фортране 77. Так как все они были написаны еще во времена DOS, то кодирование их CP866.

Пытаюсь перекодировать в utf-8, используя iconv:

iconv -f cp866 -t utf-8 < FILE.FOR > file_utf.for 
Однако, перекодированный файл скормить компилятору не удается - ругаеться на неверные символы:
 
      \xD0\xA1=\xD0\xA1*SQR\xD0\xA2(\xD0\x901**3)*(\xD0\x901*R)**L*\xD0\x95\xD0\xA5\xD0\xA0(-R*\xD0\x901/2.)              
          1
Error: Invalid character in name at (1)

enca говорит, что:

Universal transformation format 8 bits; UTF-8
  CRLF line terminators
  Surrounded by/intermixed with non-text data
  Doubly-encoded to UTF-8 from CP1251

Есть какой-то способ их конвертировать в нормальный формат, совместимый с компилятором?

NPPP в помощь

anonymous ()

iconv -l
Список поддерживаемых, ищи все на месте или нет iconv -f CP866 -t UTF-8 cp866.txt -o cp866utf.txt
Это iconv 2.19, проверил, все работает

anonymous ()
Ответ на: комментарий от aiqu6Ait

У меня есть два компилятора:

GNU Fortran (GCC) 4.9.2 20141224 (prerelease)

ifort version 14.0.2

Проблема с обеими.

andrew_s ()

Не уверен что компилятор поймёт имена переменных на кириллице в UTF-8

Можно попробовать конвертнуть в транслит.

Stanson ★★★★★ ()
Ответ на: комментарий от anonymous

iconv версии 2.20 у меня.

Притом поддерживаемые есть:

iconv -l | grep 866
866//
866NAV//
CP866//
CP866NAV//
CSIBM866//
IBM866//
IBM866NAV//
и
ISO-10646/UTF-8/
UTF-8//

Причем если открывать файл в редакторе, то все в порядке (vim, mcedit), но компилятор кушать его не хочет.

NPPP — это Notepad++, да? Дело в том, что таких файлов у меня много и хотелось бы это все под линуксом в консоли сделать.

andrew_s ()

Это что ж за гений переменные кириллицей обзывал?

Присоединяюсь к пердыдущему: конвертируй в КОИ7, получится почти транслит.

Ну или sed'ом в настоящий транслит.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Stanson

Если я создам файл с нуля и там будет кириллица в UTF-8, то компилятор срабатывает нормально.

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

Среди файлов есть и без кириллицы, но компилятор и их после конвертации не воспринимает.

Пример файла: http://s000.tinyupload.com/index.php?file_id=06689275152411766941

andrew_s ()
Ответ на: комментарий от andrew_s

Среди файлов есть и без кириллицы, но компилятор и их после конвертации не воспринимает.

Пример файла: http://s000.tinyupload.com/index.php?file_id=06689275152411766941

Куча кириллицы сходной по написанию с латинскими буквами в именах функций и переменных.

Там даже в GOTO только буква G латинская, а OTO - кириллица. И как компилятор тебе что-то скомпилирует?

Stanson ★★★★★ ()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от Stanson

Куча кириллицы сходной по написанию с латинскими буквами в именах функций и переменных.

Мдааа, о таком я и подумать не мог. Тогда понятно почему оно не работает. Спасибо.

andrew_s ()
Ответ на: комментарий от andrew_s

Мдааа, о таком я и подумать не мог. Тогда понятно почему оно не работает. Спасибо.

Да не за что. Конвертируй в транслит и всё будет работать.

Stanson ★★★★★ ()
Ответ на: комментарий от Stanson

Конвертируй в транслит и всё будет работать.

Конечно, так и сделаю. Интересная клавиатура (или кодовая страница) была у того, кто набирал этот код в те далекие времена.

andrew_s ()
Ответ на: комментарий от andrew_s

Я думаю там не только клавиатура была интересная, но и ОС и даже архитектура машины. :) Скорее всего, что-то из оригинальных советских изделий.

Stanson ★★★★★ ()

Думаю, компилятору не нравятся CRLF, попробуй сконвертировать с помощью dos2unix.

Macil ★★★★★ ()

а нужно ли перекодировать? может проще скомпилировать и запускать к примеру в другой локали?

LANG=ru_RU.CP866 ./you_very_old_programm
Если нормального вывода нету, то проверь
locale -a | grep RU
Если в выводе отсутствует строка с цифрами «866», то нужная кодировка отсутствует. Можешь её создать запуская от пользователя root следующую команду:
  localedef -c -i ru_RU -f cp866 ru_RU.cp866 

Atlant ★★★★★ ()
Последнее исправление: Atlant (всего исправлений: 2)
Ответ на: комментарий от Atlant

Забираю свой вопрос обратно, посмотрел образец файла, глаза по ПОЛТИНИКУ.
Похоже файл создан из под сканера с распознавалкой или просто секретаршей. Иначе я не представляю, как это возможно.

Atlant ★★★★★ ()
Ответ на: комментарий от Atlant

Там кирилица с латиницей вместе были. Мне просто такое извращение даже в голову не приходило. Однако код очень стар, суровые когда-то времена были. Но транслитерация с помощью sed-а помогла. Тепер все работает. Проблему решил.

Всем спасибо.

andrew_s ()
15 января 2016 г.

Найден переходный мост между DOS и LINUX программами на фортране

Вот здесь примеры универсальных фортран-77 кодов,которые одинаково хорошо компилируются и DOS и LINUX фортран-компиляторами:http://www.nombo.nl/dos.htm

Если Вам нужно откомпилировать на gnu f77 компиляторе текст программы на фортране,найденный в старом научном журнале,то загоняйте его в этот шаблон.

seramirun ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.