zoukankan      html  css  js  c++  java
  • 通过c++ 读写文本文件的中文乱码的解决方法

    前提: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(" ");
      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, '',str.GetLength());

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

     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, '', 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 ;

  • 相关阅读:
    《朗读手册》【美】吉姆·崔利斯
    《web全栈工程师的自我修养》 读书笔记
    2016/06 书单
    PostgreSQL数据库的安装
    MySQL数据库的安装
    异构数据库迁移——DATAX
    初探12C碰到的那些“坑”
    关于Ubuntu 16.04 pip安装Docker-Compose
    启动与关闭容器
    容器标识符
  • 原文地址:https://www.cnblogs.com/go2anywhere/p/4708414.html
Copyright © 2011-2022 走看看