TextOut为什么不能正确显示汉字?
程序中需要在执行菜单操作“文件->打开”后,将被打开的文件内容在窗口中显示出来,程序如下:
void CTextView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
CString filepath=pDoc->filepath; //得到被打开文件的路径和文件名
FILE *fpDoc,*fpBkp;
char c;
int hang=0;
int lie=0;
while(!feof(fpDoc))
{
fscanf(fpDoc,"%c",&c);
if(c!='\n')
{
pDC->TextOut(lie*10,hang*20,c);
lie=lie+1;
}
else
{
lie=0;
hang=hang+1;
}
}
fclose(fpDoc);
}
为什么文件中的汉字显示出来是乱码?而且文件中但凡有"tab"的地方总是在正确显示"tab"后自动加上"|"?
问题点数:10、回复次数:6Top
1 楼ninsenki(流浪鸟)回复于 2003-12-03 15:56:11 得分 2
你是按照1字节读的,汉字是两个字节,要是读了一半,不是乱了嘛Top
2 楼caihong86(caihong86)回复于 2003-12-03 16:07:34 得分 0
我原本是想TextOut的时候一行一行的显示,可不知道如何实现?如何读出一行的内容?Top
3 楼aaasng()回复于 2003-12-03 16:11:31 得分 2
用CStdioFile的ReadString可以很方便的读出一行Top
4 楼bluebohe(薄荷)回复于 2003-12-03 16:16:50 得分 2
我以前遇到这个问题,一般都是一个字一个字地往上textout,凡碰到小于零的字符就和下一个字符组成一个汉字,一般没什么问题Top
5 楼arvid_gs(west)回复于 2003-12-03 16:21:38 得分 3
用CStdioFile的ReadString可以很方便
ls1=(const char *)c_Text; //文本内容
cd=strlen(ls1); //文本字符长度
while(cd>0) //绘出所有的字符
{
c1=*ls1;
c2=*(ls1+1);
if(c1>127&&c2>127) //如果是一个汉字
{
strncpy(bz,ls1,2);//拷贝一个汉字到bz中
bz[2]=0;
ls1=ls1+2; //跳过汉字指向下一个字符位置
pDC->TextOut(cc1,cc2,bz); //在屏幕上写这个汉字
cd=cd-2; //字符数减2
}
else //如果是一个西文字符
{
strncpy(bz,ls1,1); //拷贝一个字符到bz中
bz[1]=0;
ls1++; //跳过这一个字符到下一个字符
pDC->TextOut(cc1,cc2,bz);//在屏幕上写字符
cd=cd-1; //字符数减1
}
}Top
6 楼crystal_heart(笑看风云)回复于 2003-12-03 16:43:27 得分 1
up
假如你读的数据是unicode呢?utf8呢?
Top




