LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3279|回复: 16

curses显示中文“半乱码”[问题已经解决:关键是-lcursesw]

[复制链接]
发表于 2007-1-8 14:03:41 | 显示全部楼层 |阅读模式
/*  
我想要输出
“中华人民共和国”
“2007年1月8日”
却输出了:
“中�~M~N人��~Q�~E��~R~L�~[�”
“2007年1�~\~H8�~W�”
*/
#include <stdio.h>
#include <curses.h>

int main()
{
        initscr();
        clear();

        mvaddstr(0, 0, "中华人民共和国");
        mvaddstr(1, 0, "2007年1月8日");
       
        refresh();
        getchar();
        endwin();
       
        return 0;
}
**************************************************************
output:
中�~M~N人��~Q�~E��~R~L�~[�
2007年1�~\~H8�~W�
发表于 2007-1-8 16:04:07 | 显示全部楼层
首先你的console支持不支持中文显示,如果是终端安装zhcon.是伪终端如果可以显示中文就ok了。
其次,看看printf("中文");正常不正常。
最后,curses.h最好是ncurses.h。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-8 22:56:17 | 显示全部楼层
FC5,终端可以正常输出中文
如:
printf("中文");
可以在终端正常显示

开始,initscr()函数初始化了另外一个窗口,
在endwin()之前只能对那个新窗口读写。
这时,不能用printf(),因为printf()输出到标准输出,
而不是initscr()开的窗口。

我知道只能用addstr系列罢了,但是输出的中文,有一些可以显示,一些则乱马!
回复 支持 反对

使用道具 举报

发表于 2007-1-9 08:18:38 | 显示全部楼层
ncurses.h 与curses.h有何区别?
回复 支持 反对

使用道具 举报

发表于 2007-1-9 20:33:32 | 显示全部楼层
Post by mygod
ncurses.h 与curses.h有何区别?

ncurses = new curses。 记得原来的curses是专有系统上的,比较老了。有的系统没有这个文件,ncurses.h是开源的一个实现。

这个的中文问题我觉得很可能是编码问题,如果都用utf8的编码方式看看有没有效果,还有我记得ncurses编译的时候有个utf8的选项,不知道楼主有没有注意。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-9 21:15:00 | 显示全部楼层
我见不到什么UTF-8编码选项啊?man 了一下 ncurses,一大堆,好像都没有说........

如果它全部中文都没有显示出来那还好,但是
它能显示一些出来,难道这些编码与某些编码有吻合之处?
回复 支持 反对

使用道具 举报

发表于 2007-1-9 21:28:11 | 显示全部楼层
大兄弟,做人要厚道啊,你试试看这面这个帖子...
http://www.linuxsir.cn/bbs/showthread.php?t=267078
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-10 12:27:47 | 显示全部楼层
呵呵,看过了,也试过了,没用,照样是一些中文可以显示,一些乱码
回复 支持 反对

使用道具 举报

发表于 2007-1-11 23:44:05 | 显示全部楼层
/*
        gcc src.s -o dst -lncursesw
*/
#include <ncursesw/ncurses.h>
#include <locale.h>
int main()
{
        setlocale(LC_ALL,"");
        char *out1="谁说没有中国文字!\n";
        char *out2="这是什么?\n";
        char *out3="都说了这么准可以\n";
        initscr();
        cbreak();
        printw("%s",out1);
        printw("%s",out2);
        printw("%s",out3);
        printw("这什么回事儿?\n");
        refresh();
        getchar();
        endwin();
        return 0;
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-12 14:29:39 | 显示全部楼层
问题已经解决,关键是: -lnursesw
用-lcurses不行,就是少了w
wchar_t,估计是“宽”字符
谢谢easycat兄!

唉,可否解释一下默认怎么没有按“宽”字符输出。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表