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