有像猛犸象垃圾一样古老的软件,用 C 语言编写,使用 SCO-Unix 下的 curses 和 cp866 编码。出于显而易见的原因,我正在尝试将其移植到 linux (SLES 12)。我在编译时使用 ncurses 而不是 curses(我没有愚蠢地发现)。一切似乎都在工作,但是有一个专门用大写俄语字母组成的门框 - 它显示它们是这样的:
~Qтолбец:1
代替
Столбец:1
编码:
#include <stdlib.h>
#include "curses.h"
int main(int argc, char *argv[]) {
initscr();
mvaddstr(1, 0,
"Тут текст в кодировке cp866.");
getch();
}
输出:
~Rут текст в кодировке cp866.
如果所有相同的文本与printf'om 并行显示,则显示正确的行。
要解决这种情况,您需要添加对use_legacy_coding(2) 函数的调用;后
initscr();此代码以单字节 8 位 CP866 编码正确显示文本: