WriteFile写入文件后无法正确显示

qianhao 2003-03-14 05:31:01
BOOL CEvtLog::PopFileWrite()
{
DWORD dwBytesWritten ;
WORD wByteOrderMark = 0xFFFE ;

WriteFile(m_oLogFile, &wByteOrderMark, 2, &dwBytesWritten, NULL) ;
//文件为Unicode格式

return TRUE ;
}

void CEvtLog::WriteLogFile()
{
DWORD dwBytesRead, dwBytesWritten, dwPos;
CString sTime = "";
wchar_t *chTime;
char *chRet,*chBlk;

CTime tTime = CTime::GetCurrentTime();
sTime += tTime.Format("%H:%M:%S");

chTime = (wchar_t *)malloc(sTime.GetLength());
wcscpy(chTime,sTime.GetBuffer(0));

chRet = (char *)malloc(4);
chRet = "\r\n";

chBlk = (char *)malloc(4);
chBlk = " ";

dwBytesRead = wcslen(chTime)*2 + strlen(chBlk) + wcslen(m_chLogMsg)*2 + strlen(chRet);

dwPos = SetFilePointer(m_oLogFile, 0, NULL, FILE_END);
LockFile(m_oLogFile, dwPos, 0, dwPos + dwBytesRead, 0);
WriteFile(m_oLogFile, chTime, wcslen(chTime)*2, &dwBytesWritten, NULL);
WriteFile(m_oLogFile, chBlk, strlen(chBlk), &dwBytesWritten, NULL);

WriteFile(m_oLogFile, m_chLogMsg, wcslen(m_chLogMsg)*2, &dwBytesWritten, NULL);
WriteFile(m_oLogFile, chRet, strlen(chRet), &dwBytesWritten, NULL);
UnlockFile(m_oLogFile, dwPos, 0, dwPos + dwBytesRead, 0);
}


m_oLogFile是我打开的一个文件,chLogMsg是我想写入的log信息,问题是现在我输入的chLogMsg是中文(操作系统是日文),然后写入.log文件,最后用notepad打开发现中文显示为一片乱码~~~~~~~~请高手帮帮看看!!
...全文
351 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
88dd 2003-03-19
  • 打赏
  • 举报
回复
wchar_t szDes[100];
*( (BYTE*)szDes) = 0xff;
*( ( (BYTE*)szDes ) + 1 ) = 0xfe;

swprintf( szDes + 1, L"中文" );

oFile.Write( szDes, 6 );
//oFile.SetLength(...);
oFile.Close();
qianhao 2003-03-19
  • 打赏
  • 举报
回复
to 88dd(巴迪) :

想问一下m_szDes是什么类型的?
loopyifly 2003-03-17
  • 打赏
  • 举报
回复
装操作系统的时候就自动把一些默认的字符集装入

如装中文操作系统就自带装入gb2312字符集,但日文好象并不是默认的;同理,日文操作系统应该也一样,觉得不是程序的问题。
还有就是可以把中文内容换成英文写如.log看看,如果连这个都不能功,就是程序某处出错了

可以把程序在一台中文的系统上运行看看,如果成功就说明是字符集的问题。

YXSCOM 2003-03-17
  • 打赏
  • 举报
回复
如果用Unicode的字符,就将所有char的改成TCHAR;
并将CString的内容用_T("")'
ripyu 2003-03-17
  • 打赏
  • 举报
回复
与你的操作系统有关
qianhao 2003-03-17
  • 打赏
  • 举报
回复
to GUID()

字体的问题?怎么说?
半宫佳丽 2003-03-17
  • 打赏
  • 举报
回复
我认为是字体的问题
qianhao 2003-03-17
  • 打赏
  • 举报
回复
to Iamme(不死鸟):

怎么试?能说的详细点吗?用CFile?
Iamme 2003-03-17
  • 打赏
  • 举报
回复
你直接用c库函数试试呢?
qianhao 2003-03-17
  • 打赏
  • 举报
回复
to 3jaja(3++)

在BOOL CEvtLog::PopFileWrite()这个函数中已经将.txt的头部置为0xFFFE,(unicode big endian),程序保存文件后,用NotePad打开察看,输入的文字已经是MS UI Gothic(Unicode)格式了。
qianhao 2003-03-17
  • 打赏
  • 举报
回复
1、在日文环境下,我用NotePad编辑一个纯文本的txt,添加若干中文(用微软拼音输入),保存是NotePad提示文本中包含Unicode字符,询问是否保存为Unicode格式,选择是,则大多数中文字符都能显示,少数不能显示,用?代替。

2、用Word2000日文版,输入中文,并且设置字体为Unicode,能够显示中文。

3、qq不能显示中文,是没用Unicode支持,而相同的Msn在日文环境下就能正常显示中文
3jaja 2003-03-17
  • 打赏
  • 举报
回复
将 notepad 字体属性设置为中文字符集,否则如何显示中文。
54yuandian 2003-03-17
  • 打赏
  • 举报
回复
感觉应该是与你的操作系统有关
在日文系统下QQ的内容就是乱码
呵呵
qianhao 2003-03-17
  • 打赏
  • 举报
回复
不是,字符集支持我已经装了,不过应该不是字符集的问题,是用Unicode字符来保存并且显示
akademecia 2003-03-17
  • 打赏
  • 举报
回复
日文操作系统显示中文内容??应该装中文语言套件吧。就像IE显示日文网站要装日文语言套件一样。
librastar2001 2003-03-17
  • 打赏
  • 举报
回复
只能建议你看看这些:

GetTextCharset
GetTextCharsetInfo
IsDBCSLeadByte
IsDBCSLeadByteEx
IsTextUnicode
MultiByteToWideChar
TranslateCharsetInfo
WideCharToMultiByte



librastar2001 2003-03-17
  • 打赏
  • 举报
回复
日文操作系统?
我只在玩三国4日文版的时候用过,呵呵。。
88dd 2003-03-17
  • 打赏
  • 举报
回复
TCHAR szDes[100];
*( (BYTE*)m_szDes) = 0xff;
*( ( (BYTE*)m_szDes ) + 1 ) = 0xfe;

swprintf( szDes + 1, L"中文" );

oFile.Write( szDes, 6 );
//oFile.SetLength(...);
oFile.Close();
3jaja 2003-03-17
  • 打赏
  • 举报
回复
1、在日文环境下,我用NotePad编辑一个纯文本的txt,添加若干中文(用微软拼音输入),保存是NotePad提示文本中包含Unicode字符,询问是否保存为Unicode格式,选择是,则大多数中文字符都能显示,少数不能显示,用?代替。
应该是字符显示时位置不对,例如遇到?时,你在?前回车一次,是否显示中文。
2。用Word2000日文版打开呢?
88dd 2003-03-17
  • 打赏
  • 举报
回复
回家后贴个源码给你
加载更多回复(4)

16,472

社区成员

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

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

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