unicode字符如何WriteFile文本文件

yooono 2009-06-29 09:32:28
win32项目中使用unicode定义如下 TCHAR str[100],如何 WriteFile进一个文本文件?

...全文
600 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yooono 2009-06-29
  • 打赏
  • 举报
回复
&wd, 是个什么参数?
yayafu 2009-06-29
  • 打赏
  • 举报
回复
WriteFile(h, str, lstrlen(str), &wd, NULL); //这样就写了啊,有什么区别吗?
pady_pady 2009-06-29
  • 打赏
  • 举报
回复
unicode一样写啊,根本不用转换,只是你可以在文件头先写入0xfeff说明是unicode文件,
可以用wfopen(...,L"rb")方式打开,
然后用fputws()存入UNICODE字串;
也可以用fwrite
norsd 2009-06-29
  • 打赏
  • 举报
回复
如果要写 txt 格式的 utf16 ,或者其他格式都应该写一个文件头 (普通的ascii格式不需要)

你也可以用notepad转换。
DavidHsing 2009-06-29
  • 打赏
  • 举报
回复
谈谈 Unicode 编码,简要解释 UCS、UTF、BMP、BOM 等名词
http://blog.csdn.net/DavidHsing/archive/2007/09/04/1771258.aspx

字符,字节和编码
http://blog.csdn.net/DavidHsing/archive/2008/09/05/2885043.aspx

ANSI、UNICODE、UTF-8 文件编码转换
http://blog.csdn.net/DavidHsing/archive/2008/11/17/3317841.aspx
  • 打赏
  • 举报
回复
我用过的code
FILE* OpenWriteFile(LPTSTR folderName)
{
FILE* lpLogFile;
lpLogFile = _tfopen(folderName, _T("wb"));

fputc(0xFF, lpLogFile);
fputc(0xFE, lpLogFile);

return lpLogFile;
}

FILE* OpenReadFile(LPTSTR folderName)
{
FILE* lpLogFile;
lpLogFile = _tfopen(folderName, _T("rb"));

return lpLogFile;
}
FILE* OpenAddFile(LPTSTR folderName)
{
FILE* lpLogFile;
lpLogFile = _tfopen(folderName, _T("ab"));
return lpLogFile;
}
bool WriteLine(FILE* lpLogFile, LPTSTR lpStr)
{
int iReturn = fwrite( lpStr, sizeof( wchar_t), wcslen(lpStr), lpLogFile);
fwrite( _T("\r\n"), sizeof( wchar_t), wcslen(_T("\r\n")), lpLogFile);

if(iReturn < (int)wcslen(lpStr))
{
return false;
}
return true;
}
  • 打赏
  • 举报
回复
char buf[BUFSIZE];
TCHAR str[100];
wcstombs(buf, STR, 100);

比用MultiByteToWideChar()要简单得多.
oyljerry 2009-06-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yooono 的回复:]
郁闷的unicode...
[/Quote]
unicode可以直接把字符写入,写入文件时,可以先写入unicode 头FFFE,生成unicode格式的文件
yooono 2009-06-29
  • 打赏
  • 举报
回复
郁闷的unicode...
百事烟 2009-06-29
  • 打赏
  • 举报
回复
// unicode写日志文件
void WriteLogFile(LPCTSTR szLogText)//传入CString即可
{
CTime systemtime=CTime::GetCurrentTime();
CString strTime = systemtime.Format(L"%H:%M:%S ");
CString strText;
strText.Format(L"%s%s\r\n",strTime, szLogText);
CStdioFile stdFile;
if(!stdFile.Open(L"c:\\test.log", CFile::modeWrite| CFile::typeBinary))//二进制标志要加
{
stdFile.Open(L"c:\\test.log", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
stdFile.Write("\377\376", 2);//unicode文件头
}
stdFile.SeekToEnd();
stdFile.WriteString(strText);
stdFile.Close();
}
用户 昵称 2009-06-29
  • 打赏
  • 举报
回复
直接视为unsigned char *写入文件即可。
achellies 2009-06-29
  • 打赏
  • 举报
回复
这样会很麻烦,

参考如下代码:
DWORD dwWritten = 0;
DWORD dwUnicode = 0xFEFF;
WriteFile(hFile,&dwUnicode,2,&dwWritten,NULL);

SetFilePointer(hFile,0,NULL,FILE_END);

WriteFile(hFile,(PBYTE)wcURI,2*wcslen(wcURI),&dwWritten,NULL);
yooono 2009-06-29
  • 打赏
  • 举报
回复
MultiByteToWideChar()?这样这不是更麻烦吗?
ouyh12345 2009-06-29
  • 打赏
  • 举报
回复
先把unicode转换成多字节的,读时再转换回来
pady_pady 2009-06-29
  • 打赏
  • 举报
回复
上面写快了,应该是wfopen(...,L"wb")

16,548

社区成员

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

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

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