| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1385 人关注过本帖
标题:关于中文输出到文档的问题
只看楼主 加入收藏
巔峰
Rank: 2
等 级:论坛游民
帖 子:31
专家分:30
注 册:2010-7-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
关于中文输出到文档的问题
我大一刚学了C语言,我哥要我帮他写一个出货管理软件(其实也很简单),他要求把每天的数据汇总打印出来,本来是要导出到一个excel表的,但我用C语言似乎没有这个接口,所以就打算用txt文本输出成一个表的样子打印出来。但我发现我用fwrite输出到文本文件会乱码 - -!! 原因一我想是我只用了ANSI码似乎并不足以输出中文。然后我上网看了下,有人说fwrite是二进制的输出方式,输出中文到文本文件肯定会乱码,请问各路高人,我怎样才能输出中文到文本文件,小弟感激!!!
搜索更多相关主题的帖子: 输出 中文 文档 
2010-07-13 17:08
巔峰
Rank: 2
等 级:论坛游民
帖 子:31
专家分:30
注 册:2010-7-13
收藏
得分:0 
对了,我是用VC++来编的,因为没学MFC,所以是不需要管界面的,用DOS的就行,关键还是输出中文到txt!
2010-07-13 17:10
hao0716
Rank: 4
等 级:业余侠客
威 望:1
帖 子:353
专家分:222
注 册:2006-4-11
收藏
得分:6 
ansi也是可以输出中文的,但如果vs选择的是unicode就不行
程序里的字符要和编码统一,建议看看如何使用unicode吧
还有你也可以不用输出表的样子,试一下csv后缀吧,只要把数据用,隔开来用excel打开就是表格的样子了。

2010-07-13 17:54
巔峰
Rank: 2
等 级:论坛游民
帖 子:31
专家分:30
注 册:2010-7-13
收藏
得分:0 
哦? 楼上的大哥能不能写一段小代码演示一下怎样csv制表?
2010-07-13 19:10
巔峰
Rank: 2
等 级:论坛游民
帖 子:31
专家分:30
注 册:2010-7-13
收藏
得分:0 
例如我要的格式是这样的:
型号       入库        出库      库存量
XXX        1000        10        990
2010-07-13 19:15
sidooh
Rank: 4
等 级:业余侠客
帖 子:121
专家分:265
注 册:2009-6-26
收藏
得分:6 
能不能发下你输出乱码的代码?

csv格式
型号,入库,出库,库存量
...
2010-07-13 19:35
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:6 
我有资料,楼主参考一下:
在C程序中显示汉字



  在许多C程序设计中,要用到汉字进行提示或人机交互,而现行的Turbo C集成开发环境不是汉化的,如何编制能显示汉字的C程序呢?

  下面的方法可以帮你在西文环境下显示汉字。这种方法是调用中文汉字库进行汉字显示。国家标准规定:汉字库分94个区,每个区有94个汉字(以位作区别),每个汉字在汉字库中有确定的区和位编号,这就是汉字的区位码。每个汉字在库中是以点阵字模形式存储的,一般采用16×16点阵(32字节)、24×24点阵(72字节),每个点用一个二进制位(0或1)表示,对应在屏幕上显示出来,就是相应的汉字。

  由于在中文环境下,输入的是汉字的内码,我们必须将之转换成区位码,算出偏移量,从字库中找到对应的汉字,将其字模显示即可。

  内码转换成区位码方法如下:

   qh=c1-0xa0 wh=c2-0xa0

  其区位码就是:

    qw=qh*0xff+wh

  该汉字在字库中离起点的位置是:

     offset=(94*(qh-1)+(wh-1))*32L

  程序例:

  #include 〈graphics.h〉

  #include 〈stdio.h〉

  #include 〈fcntl.h〉

  #include 〈io.h〉

  #include 〈stdlib.h〉

  #include 〈conio.h〉

  #define ROW 1       //纵坐标放大倍数

  #define COL 2      //横坐标放大倍数

  void main()

  {

   int x,y;

   char *s=〃汉字显示程序〃;

   FILE *fp;

   char buffer[32];   //buffer用来存储一个汉字

   register m,n,i,j,k;

   unsigned char qh,wh;

   unsigned long offset;

   int gd=DETECT,gm;   //图形屏幕初始化

   initgraph(&gd,&gm,〃 〃);

   if ((fp=fopen(〃hzk16〃,〃rb〃))==NULL)  

  //打开汉字库,该字库可以在ucdos中找到

     { printf(〃Can't open haz16,Please add it〃);

  getch(); closegraph(); exit(0);

     }

   x=20; y=100; //显示位置设置

   while(*s)

     { qh=*(s)-0xa0; //汉字区位码

     wh=*(s+1)-0xa0;

     offset=(94*(qh-1)+(wh-1))*32L;  //计算该汉字在字库中偏移量

     fseek(fp,offset,SEEK_SET);

     fread(buffer,32,1,fp); //取出汉字32字节的点阵字模存入buffer中(一个汉字)

     for (i=0;i〈16;i++)  //将32位字节的点阵按位在屏幕上打印出来(1:打印,0:不打印),显示汉字

  for(n=0;n〈ROW;n++)

   for(j=0;j〈2;j++)

     for(k=0;k〈8;k++)

       for(m=0;m〈COL;m++)

  if (((buffer[i*2+j]〉〉(7-k))&0x1)!=NULL)

  putpixel(x+8*j*COL+k*COL+m,y+i*ROW+n,GREEN);

    s+=2; //因为一个汉字内码占用两个字节,所以s必须加2

     x+=30;

   }

   getch();

   closegraph();

  }

  上述程序在Turbo C 2.0编译系统下运行成功,它可以将汉字放大显示,读者可以将它改成函数用在您的程序中显示汉字。

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-13 19:45
巔峰
Rank: 2
等 级:论坛游民
帖 子:31
专家分:30
注 册:2010-7-13
收藏
得分:0 
问题基本解决,感谢大家!!!
2010-07-13 23:34
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
嗯,好的

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-14 07:26
快速回复:关于中文输出到文档的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018329 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved