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();
    }
    

      

  • 相关阅读:
    git连接远程分支
    如何找N个数中第i小的数
    DeconvNet
    深度学习中的Internal Convariate Shift (ICS)
    BA算法解决p-中位问题
    蚁群算法
    蝙蝠算法初探
    轨迹压缩之Douglas-Peucker算法之C++实现
    遗传算法---编程小试
    NYOJ 1000
  • 原文地址:https://www.cnblogs.com/tewuapple/p/14111443.html
Copyright © 2011-2022 走看看