Ich versuche, eine Datei zu lesen, die einen beliebigen Zeichensatz/codePage haben kann, aber ich nicht, welches Gebietsschema zu setzen, um die Datei richtig zu lesen.Detect Zeichensatz der Datei dynamisch in C++
Unten ist mein Code-Snippet, in dem ich versuche, eine Datei mit Zeichensatz als Windows-1256 zu lesen, aber ich möchte den Zeichensatz dynamisch aus der Datei lesen, so dass ich das Gebietsschema entsprechend einstellen kann.
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
Es gibt keine vollständige Beweismethode zur Bestimmung von Zeichensatz, aber wir können hierfür die ICU-Bibliothek verwenden, die eine heuristikbasierte Lösung bietet. Ich habe ein Schnipsel von https://github.com/mooz/node-icu-charset-detector/blob/master/node-icu-charset-detector.cpp –
@SaurabhKathpalia ja, Outsourcing in eine Bibliothek ist ein guter Weg zu Sparen Sie Zeit und Mühe. Denken Sie nur an die möglichen Fallstricke des heuristischen Ansatzes (der letzte Link meiner Antwort ist ein praktisches Beispiel für eine solche Falle). – user2079303