LinuxSir.Org  
| 网站首页 | 注册账号 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
 
主题工具
旧 07-01-08, 14:03 第 1 帖
hoho_zhao 帅哥
 
 
 
注册会员  
  注册日期: Sep 2006
  帖子: 289
  精华: 0
 

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


/*
我想要输出
“中华人民共和国”
“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�

此帖于 07-01-12 14:39 被 hoho_zhao 编辑. 原因: 解决问题
  hoho_zhao 当前离线   回复时引用此帖
旧 07-01-08, 16:04 第 2 帖
wsw
 
wsw 的头像
 
 
注册会员  
  注册日期: Aug 2005
  帖子: 468
  精华: 2
 

首先你的console支持不支持中文显示,如果是终端安装zhcon.是伪终端如果可以显示中文就ok了。
其次,看看printf("中文");正常不正常。
最后,curses.h最好是ncurses.h。







__________________
在未上大学时,我一直以为自己是个天才。
正在上大学时,我以为自己将是个天才。
读完大学后,我才发现自己是并且从来就是一个彻头彻尾的傻瓜,
自大。。。浮躁。。。终究一无是处。
  wsw 当前离线   回复时引用此帖
旧 07-01-08, 22:56 第 3 帖
hoho_zhao 帅哥
 
 
 
注册会员  
  注册日期: Sep 2006
  帖子: 289
  精华: 0
 

FC5,终端可以正常输出中文
如:
printf("中文");
可以在终端正常显示

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

我知道只能用addstr系列罢了,但是输出的中文,有一些可以显示,一些则乱马!
  hoho_zhao 当前离线   回复时引用此帖
旧 07-01-09, 08:18 第 4 帖
mygod
 
 
 
注册会员  
  注册日期: Aug 2005
  帖子: 33
  精华: 0
 

ncurses.h 与curses.h有何区别?
  mygod 当前离线   回复时引用此帖
旧 07-01-09, 20:33 第 5 帖
wsw
 
wsw 的头像
 
 
注册会员  
  注册日期: Aug 2005
  帖子: 468
  精华: 2
 

引用:
作者: mygod
ncurses.h 与curses.h有何区别?
ncurses = new curses。 记得原来的curses是专有系统上的,比较老了。有的系统没有这个文件,ncurses.h是开源的一个实现。

这个的中文问题我觉得很可能是编码问题,如果都用utf8的编码方式看看有没有效果,还有我记得ncurses编译的时候有个utf8的选项,不知道楼主有没有注意。
  wsw 当前离线   回复时引用此帖
旧 07-01-09, 21:15 第 6 帖
hoho_zhao 帅哥
 
 
 
注册会员  
  注册日期: Sep 2006
  帖子: 289
  精华: 0
 

我见不到什么UTF-8编码选项啊?man 了一下 ncurses,一大堆,好像都没有说........

如果它全部中文都没有显示出来那还好,但是
它能显示一些出来,难道这些编码与某些编码有吻合之处?
  hoho_zhao 当前离线   回复时引用此帖
旧 07-01-09, 21:28 第 7 帖
easycat
 
easycat 的头像
 
 
注册会员  
  注册日期: Jun 2005
  帖子: 375
  精华: 0
 

大兄弟,做人要厚道啊,你试试看这面这个帖子...
http://www.linuxsir.org/bbs/showthread.php?t=267078







__________________
帮助我,帮助你
  easycat 当前离线   回复时引用此帖
旧 07-01-10, 12:27 第 8 帖
hoho_zhao 帅哥
 
 
 
注册会员  
  注册日期: Sep 2006
  帖子: 289
  精华: 0
 

呵呵,看过了,也试过了,没用,照样是一些中文可以显示,一些乱码







__________________
人在世上滚……
  hoho_zhao 当前离线   回复时引用此帖
旧 07-01-11, 23:44 第 9 帖
easycat
 
easycat 的头像
 
 
注册会员  
  注册日期: Jun 2005
  帖子: 375
  精华: 0
 

/*
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;
}
  easycat 当前离线   回复时引用此帖
旧 07-01-12, 14:29 第 10 帖
hoho_zhao 帅哥
 
 
 
注册会员  
  注册日期: Sep 2006
  帖子: 289
  精华: 0
 

问题已经解决,关键是: -lnursesw
用-lcurses不行,就是少了w
wchar_t,估计是“宽”字符
谢谢easycat兄!

唉,可否解释一下默认怎么没有按“宽”字符输出。。。。
  hoho_zhao 当前离线   回复时引用此帖
旧 07-01-12, 15:47 第 11 帖
herberteuler
 
herberteuler 的头像
 
 
注册会员  
  注册日期: Jul 2004
  我的住址: 你的居住地
  帖子: 1,620
  精华: 3
 

hoho_zhao 想写一个编辑器?呵呵,可以读读 Emacs 的源代码。







__________________
你所知道的有关计算的东西,其他人也都能学到。绝不要认为似乎成功计
算的钥匙就掌握在你的手里。你所掌握的,也是我认为并希望的,也就是
智慧:...

What you know about computing other people will learn. Don't
feel as if the key to successful computing is only in your
hands. What's in your hands, I think and hope, is intelligence:
...

- Alan J. Perlis
  herberteuler 当前离线   回复时引用此帖
旧 07-01-12, 17:08 第 12 帖
hoho_zhao 帅哥
 
 
 
注册会员  
  注册日期: Sep 2006
  帖子: 289
  精华: 0
 

估计现在还没有能力看懂那些源代码,等等吧
  hoho_zhao 当前离线   回复时引用此帖
旧 07-01-12, 19:27 第 13 帖
herberteuler
 
herberteuler 的头像
 
 
注册会员  
  注册日期: Jul 2004
  我的住址: 你的居住地
  帖子: 1,620
  精华: 3
 

引用:
作者: hoho_zhao
估计现在还没有能力看懂那些源代码,等等吧
其实没那么难的,如果你想的话。一个好的开始可以是你发现的一个 Bug,或者一个你比较感兴趣的特性;你不必理解全部。阅读 Emacs 源代码的另一个优点是,任何外部可见的函数,包括那些用 C 写的函数,都有非常完整的文档,而且可以很轻松地(通过点击鼠标或按回车键)在庞大的源代码树中找到,Emacs 本身为阅读它的源代码提供了尽可能的帮助。

当然,一切的开始是要熟悉 Emacs。
  herberteuler 当前离线   回复时引用此帖
旧 07-01-12, 22:07 第 14 帖
hoho_zhao 帅哥
 
 
 
注册会员  
  注册日期: Sep 2006
  帖子: 289
  精华: 0
 

我平时用的是 vim + gedit 感觉Emacs有些繁琐, gvim也不喜欢用
Emacs的源码是否自带?还是另外下载?
  hoho_zhao 当前离线   回复时引用此帖
旧 07-01-12, 22:55 第 15 帖
herberteuler
 
herberteuler 的头像
 
 
注册会员  
  注册日期: Jul 2004
  我的住址: 你的居住地
  帖子: 1,620
  精华: 3
 

引用:
作者: hoho_zhao
我平时用的是 vim + gedit 感觉Emacs有些繁琐, gvim也不喜欢用
Emacs的源码是否自带?还是另外下载?
Emacs 其实是一个 Lisp 解释器,配上了一些编辑器的功能。浏览源代码的功能,实际上是用 Lisp 写成,可以用来浏览它的 Lisp 源码或 C 源码。同其他功能相同,源代码的路径是用 Lisp 来配置的。在 Emacs 的 CVS 版本中,有一个变量 source-directory,用以告知 Emacs 它的源代码在哪里。所以即使系统里安装的 Emacs 没有自带源代码,也依然可以查看,只要找一份源代码,然后设置 source-directory 的值就可以了。当然,这需要 Emacs 的 CVS 版本,即至少 Emacs 22。
  herberteuler 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 14:47


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2010, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2009, LinuxSir.Org