通过c++ 读写文本文件的中文乱码的解决方法

it2022-05-09  37

前提:VS2010 ,MFC ,文本文件为ANSI格式。

读文件:

CString str,fileContent;CStdioFile myFile, File;if(myFile.Open(GeneralUtils::GetModuleDir()+_T(\\mx.txt), CFile::modeRead)){ //读取 while(myFile.ReadString(str)) {  str = str + _T("\n");  ReadStringCharToUnicode(str);  fileContent = fileContent + str; } myFile.Close();}

写文件:

*.h

#include <locale.h>

*.cpp

setlocale(LC_CTYPE,"chs");myFile.Open(GeneralUtils::GetModuleDir()+_T(\\mx2.txt), CFile::modeWrite | CFile::modeCreate);  myFile.WriteString(fileContent);myFile.Close();

void ReadStringCharToUnicode(CString &str){ char *szBuf = new char[str.GetLength() + 1];//注意“+1”,char字符要求结束符,而CString没有 memset(szBuf, '\0',str.GetLength());

 int i; for ( i = 0 ; i < str.GetLength(); i++) {  szBuf[i] = (char)str.GetAt(i); } szBuf[i] = '\0';//结束符。否则会在末尾产生乱码。

 int nLen; WCHAR *ptch; CString strOut; if(szBuf == NULL) {  return ; } nLen = MultiByteToWideChar(CP_ACP, 0, szBuf, -1, NULL, 0);//获得需要的宽字符字节数 ptch = new WCHAR[nLen]; memset(ptch, '\0', nLen); MultiByteToWideChar(CP_ACP, 0, szBuf, -1, ptch, nLen); str.Format(_T("%s"), ptch);

 if(NULL != ptch)  delete [] ptch; ptch = NULL;

 if(NULL != szBuf)  delete []szBuf; szBuf = NULL; return ;} 

转载于:https://www.cnblogs.com/go2anywhere/p/4708414.html

相关资源:解决读写包含汉字的txt文件时乱码的问题

最新回复(0)