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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM