Войти

Показать полную графическую версию : Некорректный вывод в консоль Паскаль программы


softoblogger
10-09-2013, 18:49
Здравствуйте.
Есть программа написанная на Turbo Pascal, и работающая в текстовом режиме. В консоли Windows 80х25 всё работает хорошо. Я хотел её ещё скомпилировать под Linux используя Free Pascal. Скомпилировать удалось, но выводит информацию в терминале криво.
Где то на 45-50м символе строка обрывается и переносится на другую/или вообще не переносится, причём последний символ в месте разрыва либо исчезает либо крякозябром отображается. В остальном вроде нормально функционирует.
Терминал в Linux достаточно широкий (90 символов), а моя строка занимает макс. 65. Т.е. места ещё хватает.
Для вывода используются функции Write,WriteLn. Кодировка UTF-8, русские символы.
В чём может быть проблема и как решить? Есть идея TextMode пробовать, хотя не уверен что поможет.

softoblogger
11-09-2013, 17:16
Textmode испытал, как и думал - не помогло.
TextMode(CO80) продлил строку аж на 2 символа! CO80+Font8x8 - вообще не выводит, ещё пустые строки вставляет. Проверял значение константы LastMode - она равна 3, т.е. инициализируется нужный режим 80х25, но строка почему-то переносится :(
Неужели никто не может подсказать, как это можно исправить? :dont-know

torauma
12-09-2013, 09:49
Скорее всего проблема с обработкой UTF-8. Один символ UTF-8 воспринимается writeln как 2 символа ASCII вот и выводятся чудеса. Посмотрите документацию по вашей версии FPC, возможно там Unicode вобще не поддерживается.

softoblogger
14-09-2013, 19:06
Скорее всего проблема с обработкой UTF-8. Один символ UTF-8 воспринимается writeln как 2 символа ASCII вот и выводятся чудеса. Посмотрите документацию по вашей версии FPC, возможно там Unicode вобще не поддерживается. »
Точно, так и есть. Если все символы Юникодные, то хватает ровно 40, а если все чистая латиница, то 80 - нормально. Ну а как это решить? Ведь другие программы в терминал нормально выводят, хотя и в юникоде.
Версия 2.2.4 В документации написано, что есть поддержка UTF8, причём по умолчанию.
Может мне в 1251 сделать, но надо как-то на время выполнения программы задать эту кодовую страницу в терминале. Как это сделать?
SetConsoleOutputCP - это только на Win-платформах кажется работает.




© OSzone.net 2001-2012