Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Некорректный вывод в консоль Паскаль программы (http://forum.oszone.net/showthread.php?t=267855)

softoblogger 10-09-2013 18:49 2215758

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

softoblogger 11-09-2013 17:16 2216193

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

torauma 12-09-2013 09:49 2216518

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

softoblogger 14-09-2013 19:06 2217837

Цитата:

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

Точно, так и есть. Если все символы Юникодные, то хватает ровно 40, а если все чистая латиница, то 80 - нормально. Ну а как это решить? Ведь другие программы в терминал нормально выводят, хотя и в юникоде.
Версия 2.2.4 В документации написано, что есть поддержка UTF8, причём по умолчанию.
Может мне в 1251 сделать, но надо как-то на время выполнения программы задать эту кодовую страницу в терминале. Как это сделать?
SetConsoleOutputCP - это только на Win-платформах кажется работает.


Время: 19:55.

Время: 19:55.
© OSzone.net 2001-