UNICODE程序写文件出现乱码

来源:互联网 发布:mysql date add的用法 编辑:程序博客网 时间:2024/05/17 03:31

在程序中使用的是UNICODE编码,写入文件时如果存在中文就会出现乱码,原因是写入文件内容变成了ANSI编码,解决的办法是将需要写入文件的内容首先转换成宽字符然后再转换UTF-8编码。代码如下:

std::string WideToUTF8(const std::wstring& _src)
{
int nBufSize = WideCharToMultiByte(CP_UTF8, 0, _src.c_str(),-1, NULL, 0, 0, FALSE);
char *szBuf = new char[nBufSize];
WideCharToMultiByte(CP_UTF8, 0, _src.c_str(),-1, szBuf, nBufSize, 0, FALSE);
std::string strRet(szBuf);
delete []szBuf;
szBuf = NULL;
return strRet;
}// 写出宽字符串时这样用,内容在text中
if(fopen_s( &pFile, "log.txt","a")!=0)
{
std::string str = WideToUTF8( text );
fputs(str.c_str(), pFile);
fputc('\n',pFile);
fclose(pFile);
}

原创粉丝点击