关于CFile的一个奇怪的问题

huiminlee 2008-03-17 03:25:00
我想使用windows的字库生成一点阵字库。
基本思路是:在VC中使用windows字库在屏幕上显示一个字,读出点阵信息,存入一个文件。

非常奇怪的是如果只保存一个字的点阵信息,写到文件后,文件是GB2312编码的,可是如果使用循环一次保存多个字的点阵信息,写到文件后就变成了UNICODE编码的文件。奇怪,请知道的人帮帮我。
伪码如下:

int savedCharNum = 0;
int allCharNum= 20; //examle
CFile zimoFile;//保存字符点阵信息的文件
while(savedCharNum < allCharNum)
{
dc.text(xPos,yPos,str);
getZimo();//得到点阵信息
SaveZimo2File();//保存点阵信息到文件
savedCharNum++;
}

这段代码中,如果将while()一句去掉,保存的文件就是GB2312的编码,如果加上这一句就变成了UNICODE编码
...全文
115 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yofoo 2008-03-25
  • 打赏
  • 举报
回复
我也遇到了这个问题,
有时无论是CreateFile(CFile 其实就是用CreateFile), fopen 都会保存成UNICODE

而且UNICODE文件头FF EF自动加上, 找了好几天没找到原因


MSDN看到一段话, 不知是否与这有关

When a Unicode stream-I/O function operates in text mode (the default), the source or destination stream is assumed to be a sequence of multibyte characters. Therefore, the Unicode stream-input functions convert multibyte characters to wide characters (as if by a call to the mbtowc function). For the same reason, the Unicode stream-output functions convert wide characters to multibyte characters (as if by a call to the wctomb function).




tccqs 2008-03-25
  • 打赏
  • 举报
回复
up and mark,,
huiminlee 2008-03-25
  • 打赏
  • 举报
回复
后来我又试了一次,居然又生成正常的GB2312编码了。我也不知道是怎么回事,谢谢各位。

另外对1楼提出意见,应该认真看看什么是UNICODE和GB2312.
cnzdgs 2008-03-17
  • 打赏
  • 举报
回复
既然自己感觉与CFile有关,为何不把使用CFile的代码都贴上。
我都是用CreateFile、ReadFile和WriteFile这些函数来访问文件的,比较好控制。
闪破风浪 2008-03-17
  • 打赏
  • 举报
回复
为什么呢?
为什么呢?
。。。。。。。
这是为什么呀?
vcPlayer 2008-03-17
  • 打赏
  • 举报
回复
这里看不出什么问题,应该在你的SaveZimo2File()函数里面看看!

如果你写的内容里面可能出现高位(>=0x80)字节的话,最好在文本最开头写一个0x0D, 0x0A,以防写入UNICODE文本文件的标志0xFF, 0xFE。
用户 昵称 2008-03-17
  • 打赏
  • 举报
回复
这种生成字库的做法俺常用。
不过俺常用的是fopen之类的
jameshooo 2008-03-17
  • 打赏
  • 举报
回复
GB2312的编码格式就是UNICODE的,GB18060的编码格式是4字节的。
楼主是如何区分GB2312和UNICODE的?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧