#c #ncurses
Есть древний как помёт мамонта софт, писаный на С с использованием curses под SCO-Unix и кодировку cp866. Я пытаюсь перенести его на linux (SLES 12) в связи понятно с чем. Вместо curses(которую тупо не нашел) при компиляции использую ncurses. И вроде все работает, но вот есть один косяк конкретно с заглавными русскими буквами - он их отображает вот так: ~Qтолбец:1 вместо Столбец:1 Код: #include#include "curses.h" int main(int argc, char *argv[]) { initscr(); mvaddstr(1, 0, "Тут текст в кодировке cp866."); getch(); } Выводит: ~Rут текст в кодировке cp866. Если весь тот-же текст параллельно выводить printf'ом, то выводится корректная строка.
Ответы
Ответ 1
Для исправления данной ситуации надо добавить вызов функции use_legacy_coding(2); после initscr(); the parameter is in the range 128-159, i.e., a C1 control code. If use_legacy_coding has been called with a 2 parameter, unctrl returns the parameter, i.e., a one-character string with the parameter as the first character. Otherwise, it returns ''~@'', ''~A'', etc., analogous to ''^@'', ''^A'', C0 controls. Такой код корректно отображает текст в однобайтовой восьмибитной кодировке CP866: #include#include "curses.h" int main(int argc, char *argv[]) { initscr(); use_legacy_coding(2); mvaddstr(1, 0, "Тут текст в кодировке cp866."); getch(); }
Комментариев нет:
Отправить комментарий