Immer wieder stolpere ich darüber. Entweder kommen die Daten in C# aus einer Textbox, einer Datenbank, einer Datei oder einem Web Service. Und immer wieder gibt es Probleme, dass die Umlaute plötzlich kryptisch sind. Deshalb hätte ich gern eine Methode, die alle Quellen egal welchen Encodings auf ein definiertes hebt. Also etwa: ASCII -> UTF8, UTF7 -> UTF8 ...
Das geht leider technisch nicht, da du einem String nicht anssiehst wie er encodiert ist. Du kannst (und so machen es einige Editoren) dir eine Auswahl an Zeichen raussuchen die in jedem Encoding anders sind.
z.B. "ä","ü","ö","ß",...
Wenn du jetzt in deinem String auf "ü" stößt weißt du das es ein UTF8-String ist der als ASCII interpretiert wurde.
Auf diese weise kannst du Tabellen aufbauen die dir als indicator für das Encoding dienen.
Fertige Implementierungen deines Problems findest du hier: