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 ;

  • 相关阅读:
    内存的分页管理方式解释
    分组统计SQL
    NUMA导致的Oracle性能问题
    SQL Server死锁的解决过程
    PHP创建对象的6种方式
    PHP编程20大效率要点
    php设置随机ip访问
    php使用QueryList轻松采集JavaScript动态渲染页面
    正确理解 PHP 的重载
    PHP 核心特性之匿名函数
  • 原文地址:https://www.cnblogs.com/go2anywhere/p/4708414.html
Copyright © 2011-2022 走看看