我使用ncurses做一种sim城市模拟器。
我在.txt中有ascii map,我需要在终端上加载它。
加载很好,但它没有显示正确的字符(仅限某些字符)。
例如:
in .txt - >在终端
│ - > 〜T〜乙
= - > 〜U〜P
( - >(
我使用http://www.theasciicode.com.ar/作为ascii地图
bellow是在终端
中显示地图的代码nt setUpMap(){
FILE *fp;
int c;
fp = fopen("./files/map.txt", "r+");
cbreak();
// Read and display data
while ((c = fgetc(fp)) != EOF)
{
switch(c){
case 'p' :
// todo : emoji
break;
default:
printw("%c", c);
break;
}
}
fclose(fp);
return 0;
}
.txt:
的内容示例┌───────────────────────┐
│ [] [] [] [] │
│ [] [] [] [] [] │
│ [] [] [] [] │
│ │
│ ┌──┐ ┌──┐ │
└───┘ └───────┘ └─────┘
终端输出:
�~T~L�~T~@�~T~@�~T~@�~T~@�~T~@�~T~@�~T~@�~T~@�~T~@�~T~@�~T~@�~T~@�~T~@ �~T~@�~T~@�~T~@�~T~@�~T~@�~T~@�~T~@�~T~@�~T~@�~T~@�~T~P
�~T~B [] [] [] [] �~T~B
�~T~B [] [] [] [] [] �~T~B
�~T~B [] [] [] [] �~T~B
�~T~B �~T~B
�~T~B �~T~L�~T~@�~T~@�~T~P �~T~L�~T~@�~T~@�~T~P �~T~B
�~T~T�~T~@�~T~@�~T~@�~T~X �~T~T�~T~@�~T~@�~T~@�~T~@�~T~@�~T~@�~T~@�~T~X �~T~T�~T~@�~T~@�~T~@�~T~@�~T~@�~T~X
感谢任何想法
答案 0 :(得分:0)
一般来说, curses 会按预期显示POSIX字符集可打印字符。除此之外,还有其他步骤(和限制)。
对于 ncurses ,您必须初始化语言环境,以使其将代码160-255打印为字符。在initialization的ncurses手册部分中提到了这一点。
但是如果您的语言环境使用UTF-8编码(如典型的开箱即用“桌面”系统那样),那么ncurses将期望应用程序提供UTF-8的字节,例如,使用{{ 1}}或addch
。 addstr
可能在这种情况下工作,尽管没有人对该特殊情况的成功(或失败)发表评论。
如果值为128-159,那些字节中的一些(引用printw
)可能是UTF-8编码字符的一部分,并且根据您是否在ncurses中初始化语言环境,您会得到不同的结果
无论哪种方式(128-159或160-255),当ncurses在显示UTF-8的终端中打印这些值时,您将获得所示的行为。
0-255范围内的其他值是控制字符。
由于您的示例使用addch
,因此我们无需考虑高于255的值。
假设您的示例是UTF-8,此程序(与 ncursesw 链接,wide-character library)将按预期显示文本:
fgetc
答案 1 :(得分:0)
要使用扩展的ascii caracters,您需要使用nursesw而不是ncurses
你需要apt-get ncursesw来使用它
主要内容仍包含#<ncurses.h>
编译时,你把-lncursesw