• 主页
  • 系统维护与使用
  • 应用程序开发
  • 内核源代码
  • 驱动程序开发
  • CPU和硬件区
  • UNIX文化
  • Solaris
  • Power Linux

linux下wprintf为什么没有输出?

expert2000 2006-03-28 05:55:47
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main(void)
{
wchar_t* wstr=L"哈罗";;
setlocale(LC_CTYPE,"")
wprintf(L"%s\t",wstr);
return 0;
}

linux系统中的LANG= zh_CN.GB18030
redflag 4 个人版

输出为空,为什么?是不是系统要进行什么设置?
...全文
238 点赞 收藏 13
写回复
13 条回复
expert2000 2006年03月29日
还有我输入的时候怎么好选择用什么编码。比如程序上面要球输入中文姓名。
回复 点赞
expert2000 2006年03月29日
为什么LANG=GB2312的时候,能输出UNICODE的哈罗,却输不出GB2312的哈罗。
当LANG=utf8时,反而输不出UNICODE的哈罗,输出的GB2312的哈罗也是鹿镁。
回复 点赞
bcb_alone 2006年03月29日
因为"哈罗"这两个字的编码,本身是GB2312.比如是 0x8400 0x8500
你是用GB2312中文输入法输入的。所以是GB2312.
而wchar是换成unicode的。
所以。用wprintf输出为unicode的字符。而unicode的0x8400对应的是另一个汉字。'鹿'
//这样是可以输出的。

lang = GB2312;
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main(void)
{
wchar_t a[3];
wchar_t* wstr=L"哈罗";
a[1] = 0x7F57; //unicode "哈"
a[0] = 0x54c8; //unicode "罗"
a[2] = L'\0';
setlocale(LC_CTYPE,"");
wprintf(L"%S\n",a);
return 0;
}

如果lang = utf8;
那么,当你重新打开你的C源文件时,“哈罗”两字已经变成其它字符了。
回复 点赞
expert2000 2006年03月29日
控制台输出,是不是编译的时候要加什么选项
回复 点赞
expert2000 2006年03月29日
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main(void)
{
wchar_t* wstr=L"哈罗";;
setlocale(LC_CTYPE,"")
wprintf(L"%s\t",wstr);//1
wprintf(L"哈罗\n");//2
return 0;
}
以上程序,注释掉第一个或者第二个wprntf都没有输出。2个同时存在,输出 鹿镁t@lo
把第一个和第二个wprintf中的\t,\n删掉。输出 鹿镁

用的命令 #LANG=zh_CN.utf8 ./appname
编译 : gcc -o appname appname.c
回复 点赞
fierygnu 2006年03月29日
试试执行
LANG=zn_CN.utf8 yourapp
回复 点赞
expert2000 2006年03月29日
输出一长串,有zn_CN.utf8等几十个.utf8
回复 点赞
fierygnu 2006年03月29日
系统环境能设置为utf8。locale -a看看。
回复 点赞
expert2000 2006年03月29日
注释掉后输出全是????

是不是系统的环境和我输出需要的环境不一致,要怎么设置?
回复 点赞
expert2000 2006年03月29日
十分感谢2位的回答。还有最后一点问题
其实上面的问题,要想读入任何码值都能正确显示,就是一个内码转换的问题。将读入的码和系统当前的码比较。不同就通过码值计算转换到相同。然后看码值在系统中是否有对应,有的话字符就能正确显示。

思路是不是这样?我听说unicode编码的字符在任何语言的操作系统中都能正确显示。这个unicode不是utf8吧?那是什么?linux支持unicode吗?
回复 点赞
bcb_alone 2006年03月29日
因为uft8和unicode和GB2312的编码是不同的。
回复 点赞
expert2000 2006年03月29日
已经可以输出了。假设输出语句还是2条。
wprintf(L"%s\t",wstr);//1
wprintf(L"哈罗\n");//2
输出情形如下:
[root@redflag c]#./app
[root@redflag c
[root@redflag c
[root@redflag c]#
这是结果不对,但是,我只要把窗口刷新一下,就对了。
[root@redflag c]#./app
哈罗
哈罗
[root@redflag c]#

这是为什么?我装入的是GB18030,GB2312,UTF8还是有问题。

回复 点赞
fierygnu 2006年03月28日
把setlocale(LC_CTYPE,"")注释掉试试。
回复 点赞
发动态
发帖子
Linux/Unix社区
创建于2007-08-27

7063

社区成员

7.3w+

社区内容

Linux/Unix社区 应用程序开发区
社区公告
暂无公告