Wenn die üblichen Encodings wie UTF8, Latin1, ISO-8859-15 nicht funktionieren kann man CP437 versuchen. Das ist der Original-Zeichensatz des IBM-PC ab 1981. Dieser enthält Umlaute die in den üblicherweise eingestellten Encodings nicht angezeigt werden.
Hier mein erster Versuch CP437 nach UTF8 zu konvertieren. Die Sourcecode Datei und der Compiler und das ganze Betriebssystem ist selbstverständlich auf UTF8 eingestellt, sonst funktioniert es nicht.
std::string cp437toUTF8(std::string_view str) { std::string result; result.reserve(str.size()); for(unsigned char c : str) { switch(c) { case 129: result.append("ü"); break; case 132: result.append("ä"); break; case 142: result.append("Ä"); break; case 148: result.append("ö"); break; case 153: result.append("Ö"); break; case 154: result.append("Ü"); break; case 225: result.append("ß"); break; default: result.push_back(c); } } return result; }
[1] https://de.wikipedia.org/wiki/Codepage_437
[2] https://www.ascii-code.com/CP437