Есть древний как помёт мамонта софт, писаный на С с использованием curses под SCO-Unix и кодировку cp866. Я пытаюсь перенести его на linux (SLES 12) в связи понятно с чем. Вместо curses(которую тупо не нашел) при компиляции использую ncurses. И вроде все работает, но вот есть один косяк конкретно с заглавными русскими буквами - он их отображает вот так:
~Qтолбец:1
вместо
Столбец:1
Код:
#include
int main(int argc, char *argv[]) {
initscr();
mvaddstr(1, 0,
"Тут текст в кодировке cp866.");
getch();
}
Выводит:
~Rут текст в кодировке cp866.
Если весь тот-же текст параллельно выводить printf'ом, то выводится корректная строка.
Ответ
Для исправления данной ситуации надо добавить вызов функции 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
int main(int argc, char *argv[]) {
initscr();
use_legacy_coding(2);
mvaddstr(1, 0,
"Тут текст в кодировке cp866.");
getch();
}
Комментариев нет:
Отправить комментарий