zoukankan      html  css  js  c++  java
  • [C++]ifstream和getline获取中文乱码解决方案

     读取Ini文件的类踩了一个坑,当配置文件有中文参数时候,没法正确读取。读到的全是乱码。查询了很久才发现ifstream本身就无法正常读取包含中文路径的文本(具体的解决方案就不细说了网上一堆)。这里主要讲一下getline读取到乱码的解决办法。

    原文连接:点击这里查看原博主文章

    添加一个函数转换一下编码

    std::string UTF8ToGB(const char* str)
    {
        std::string result;
        WCHAR *strSrc;
        LPSTR szRes;
     
        //获得临时变量的大小
        int i = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
        strSrc = new WCHAR[i + 1];
        MultiByteToWideChar(CP_UTF8, 0, str, -1, strSrc, i);
     
        //获得临时变量的大小
        i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);
        szRes = new CHAR[i + 1];
        WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL);
     
        result = szRes;
        delete[]strSrc;
        delete[]szRes;
     
        return result;
    }

    在使用getline的时候,把字符转换一下即可

    std::string line;
    while (std::getline(fin, line))
    {
    		std::string str = UTF8ToGB(line.c_str()).c_str();
    }
    

      

  • 相关阅读:
    [POI2013]LUK-Triumphal arch
    [CF1149C](Tree Generator)
    NOI2018归程
    [CF191](Fools and Roads)
    [CF700E](Cool Slogans)
    我石乐志
    想题的时候不要颓废
    人不能忘耻
    反思
    中考加油!
  • 原文地址:https://www.cnblogs.com/tewuapple/p/14111443.html
Copyright © 2011-2022 走看看