使用UTF-8和Putty时,Ncurses边界打印为Q,X
NCURSES border printing as q, x, when using UTF-8 and PuTTY
我正在尝试学习ncurses来为我的程序添加一些功能,但是我似乎无法将终端设置放在默认的ncurses window window border按预期显示的地步。
这是我要获得带有盒子边框的窗口的输出:
lqqqqqqqqk
x x
x x
x x
mqqqqqqqqj
但是我应该得到这个:
┌────────┐
│ │
│ │
│ │
└────────┘
我唯一能够找到解决此问题的唯一一件事是将我的腻子删除字符设置为拉丁-1而不是utf-8,但是这会弄乱我的所有其他应用程序,包括vim。
有一些相关的问题,所以我发现的问题( 1 和 2 ),但是它们的解决方案都没有帮助我。我从第二个中拉出的唯一有趣的事情是,如果我在命令行中运行printf '342224224342224200342224220'
,它将打印出└─┐
(这是正确的...)。
这是我用来测试以下简单程序:
#include <iostream>
#include <ncurses.h>
#include <string>
#include <cstring>
int main() {
WINDOW *my_win;
int startx, starty, width, height;
int ch;
initscr();
cbreak();
keypad(stdscr, TRUE);
refresh();
int height = 5;
int width = 10;
my_win = newwin(height, width, 1, 2);
box(my_win, 0, 0);
wrefresh(my_win);
getch();
endwin();
return 0;
}
有什么想法我会做什么错?谢谢!
您没有初始化语言环境。没有这些,ncurses将假定它可以使用终端描述。
进一步阅读:
- ncurses手册页,初始化:
库使用调用程序具有的语言环境 初始化。通常使用setlocale完成:
setlocale(LC_ALL, "");
如果未初始化语言环境,则库假定 字符可打印,如ISO-8859-1中 某些旧计划。您应该初始化语言环境 并且不依赖库的具体细节 该语言环境尚未设置。
- ncurses手册页,
NCURSES_NO_UTF8_ACS
:
在初始化中,ncurses库检查是否有VT100线绘制的特殊情况(以及相应的 替代字符集功能) 已知终端缺失。具体而言,在 utf-8 Locale 中运行时,Linux控制台仿真器和 GNU屏幕程序忽略这些程序。ncurses检查术语 这些环境变量。对于其他特殊情况, 您应该设置此环境变量。
解决方案将是在腻子配置中,以确保"启用VT100线绘图",即使在UTF-8模式下也可以进行。
PUTTY屏幕快照
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在c++中打印目录
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何将结构插入到集合中并打印集合的成员
- 在循环C++中指定字符串之后,不会打印该字符串
- 以螺旋方式打印矩阵的程序.(工作不好)
- 从控制台中删除最后打印的元素
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何仅使用对象名称打印特定于对象的成员
- 回溯C++不打印函数,因此文件
- 在一定长度后从数组中打印时缺少整数
- std::当在256字节边界上写入整数时,流的奇怪行为
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 在gem5中打印文件中的所有cache_blocks
- 打印数字图案
- 使用UTF-8和Putty时,Ncurses边界打印为Q,X