unicode往文件中写中文的问题

koji004 2008-02-14 10:22:08
我的代码是这样的
CStdioFile fLogList;

fLogList.Open(_T("LogList.txt"), CFile::modeCreate|CFile::modeReadWrite);
fLogList.WriteString(_T("[##开始文件信息##]\n"));

fLogList.Close();

在unicode环境下编译能通过,但执行后只写进去[##后面的内容就没了,把写入的内容改成英文就可以正常地写入文件中

也就是说中文不能写,不知道应该怎么办
...全文
254 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
桃子 2008-03-13
  • 打赏
  • 举报
回复
mark
terran_ye 2008-03-05
  • 打赏
  • 举报
回复
mark
diudiuqqqq 2008-03-04
  • 打赏
  • 举报
回复
FILE* pFile;
pFile = fopen("LogList.txt", "w");

CString logstring=_T("新年快乐");

int ansiCount;
char *pTempChar;
ansiCount=WideCharToMultiByte(CP_ACP,0,logstring,-1,NULL,0,NULL,NULL);
pTempChar=(char*)malloc(ansiCount*sizeof(char));
memset(pTempChar,0,ansiCount);
WideCharToMultiByte(CP_ACP,0,logstring,-1,pTempChar,ansiCount,NULL,NULL);

fwrite(pTempChar,sizeof(char),ansiCount,pFile);


free(pTempChar);
fclose(pFile);
wangjs720 2008-03-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhoujianhei 的回复:]

经过测试,楼主代码没有问题。
[/Quote]

要是使用多字节字符集的话就没问题.
如果使用UNICODE就有问题,MFC对UNICODE的这个处理有问题.
koji004 2008-03-01
  • 打赏
  • 举报
回复
'_tfopen_s' : undeclared identifier

这个_tfopen_s要导入哪个文件?
Torch009 2008-03-01
  • 打赏
  • 举报
回复
用C库函数,二进制写进去就行了。
BombZhang 2008-02-14
  • 打赏
  • 举报
回复
FILE* pFile;
_tfopen_s(&pFile,_T("d:\\LogList.txt"),TEXT("w"));

CString logstring=_T("[##开始文件信息##]\n");

int ansiCount;
char *pTempChar;
ansiCount=WideCharToMultiByte(CP_ACP,0,logstring,-1,NULL,0,NULL,NULL);//先计算该宽字符串所对应ANSI字符串的长度,包括字符串结束符
pTempChar=(char*)malloc(ansiCount*sizeof(char));//申请空间
memset(pTempChar,0,ansiCount);
WideCharToMultiByte(CP_ACP,0,logstring,-1,pTempChar,ansiCount,NULL,NULL);//转换字符

fputs(pTempChar,pFile);
free(pTempChar);

fclose(pFile);
cnzdgs 2008-02-14
  • 打赏
  • 举报
回复
Unicode编码的txt文件需要在文件开头两字节写入0xff、0xfe,然后再写Unicode文本。
crumpy 2008-02-14
  • 打赏
  • 举报
回复
LZ如何确定#后面的中文没有写进文件中, 查最后TXT文件的大小了吗, 还是仅仅是看不到后面的字?

比如_T("#中文#")写到文件中文件大小是8字节
koji004 2008-02-14
  • 打赏
  • 举报
回复
普通编译环境下是没有问题的,但在unicode环境下就不行了
zhoujianhei 2008-02-14
  • 打赏
  • 举报
回复

经过测试,楼主代码没有问题。
koji004 2008-02-14
  • 打赏
  • 举报
回复
能给点具体的示例吗?
我初学者,较愚笨
phoenix_fei 2008-02-14
  • 打赏
  • 举报
回复
要先转化为ASCII,然后写入.
oakfire 2008-02-14
  • 打赏
  • 举报
回复
没了是什么意思? [##后应该是乱码吧。
ouyh12345 2008-02-14
  • 打赏
  • 举报
回复
在写文件时,都是按char来写入的
因此,要把宽字符转换成多字节,读的时候,再转换回来
WideCharToMultiByte
MultiByteToWideChar
koji004 2008-02-14
  • 打赏
  • 举报
回复
能说详细些不?
ouyh12345 2008-02-14
  • 打赏
  • 举报
回复
得先转换成多字节的
gebifangjian 2008-02-14
  • 打赏
  • 举报
回复
学习....
rayland 2008-02-14
  • 打赏
  • 举报
回复
如10楼所言,unicode txt文本需要写入 头信息.
在fLogList.Open之后添加
#ifdef UNICODE
TCHAR cbuf[2];
cbuf[0] = 0xFEFF; //FF在低 FE在高
fLogList.Write(cbuf,1*sizeof(TCHAR));
#endif

16,548

社区成员

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

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

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