Exception Ausgabe mit falschem Encoding



  • Ich habe eine Exception abgefangen, die im Debugger ordnungsgemäß angezeigt wird:

    Ungültiger Spaltenname...

    catch (Exception ex)
    {
        string exMessage = ex.Message;
        OutputProtokoll(exMessage);
    }
    

    Diese übergebe ich nun an eine Methode, die ein Protokoll ausgeben soll:

    public void OutputProtokoll(string exMessage)
    {
        string fileName = ...txt;
        if (!File.Exists(fileName))
        {
            StreamWriter myFile = new StreamWriter(fileName);
            myFile.Write(exMessage, System.Text.Encoding.Default);
            myFile.Close();
        }
    }
    

    Doch trotz des Encodings bekomme ich im Protokoll angezeigt:

    Ungültiger Spaltenname

    Demnach muss ja schon ein Encodingfehler in der Handhabung des Eingangs sein. Mit einem StreamReader wäre das kein Problem, da encodiere ich dann im Reader, aber wie mache ich das dann in der Exception?



  • Ich vermute eher, da passt was nicht mit dem lokalen Encoding (bzw. Codepage) des PCs. Was für ein OS nutzt du und welches Default-Encoding ist da eingestellt? Übrigens ist es nicht so der Hit, Encoding.Default zu verwenden. Stattdessen sollte man lieber ein konkretes Encoding (z.B. Unicode oder UTF-8) angeben, denn Encoding.Default kann auf zehn verschiedenen PCs auch zehn verschiedene Werte haben und man ist nie konsistent.

    (Alternativ zeigt dein Editor Grütze an, wenn du das Protokoll aufrufst)



  • Wie man Default Encoding rausfindet (benutze Win7) weiß ich zwar nicht, aber eine Umstellung von System.Text.Encoding.Default auf System.Text.Encoding.UTF8 hat schon zur Lösung geführt. Vielen Dank



  • Wieso wird das ü eigentlich durch 18 Zeichen codiert, ist das nicht ein bisschen viel? Hier scheint mindestens zweimal codiert zu werden, ü -> [????] -> ü



  • Mhhhh, ich bin mir nicht sicher, aber mit UTF8 ist alles optimal dargestellt, dadurch kann ich nicht nachvollziehen, wieso DANN zweimal encodiert wird.


Anmelden zum Antworten