我想讀這可能有任何字符集/代碼頁文件,但我沒有哪個區域,以便正確讀取該文件來設置。檢測文件的字符集動態地在C++中
以下是我的代碼段,其中我試圖讀取一個charset爲windows-1256的文件,但我想從正在讀取的文件中動態獲取字符集,以便相應地設置語言環境。
std::wifstream input{ filename.c_str() };
std::wstring content{ std::istreambuf_iterator<wchar_t>(input1), std::istreambuf_iterator<wchar_t>() };
input.imbue(std::locale(".1256"));
contents = ws2s(content); // Convert wstring to CString
目前還沒有確定字符集的完全證明方式,但我們可以使用ICU庫來提供基於啓發式的解決方案。我使用了https://github.com/mooz/node-icu-charset-detector/blob/master/node-icu-charset-detector.cpp –
@SaurabhKathpalia是的一個片段,外包給圖書館是一種很好的方式節省時間和精力。只要記住啓發式方法的潛在缺陷(我的答案的最後一個環節就是這種陷阱的一個實際例子)。 – user2079303