Laden...

Eine Textdatei mit korrektem Encoding in einer Textbox anzeigen

Erstellt von marlem vor 5 Jahren Letzter Beitrag vor 5 Jahren 2.033 Views
M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren
Eine Textdatei mit korrektem Encoding in einer Textbox anzeigen

Hallo,

ich entwickle mit WPF einen Texteditor.
Das öffnen einer Textdatei die danach in einer WPF Textbox angezeigt wird mache ich so:


if (vOpenFileDialog.ShowDialog() == true)
   edtEditor.Text = File.ReadAllText(vOpenFileDialog.FileName);

Ein Freund von mir, hat eine Textdatei, da werden de Umlaute nicht richtig dargestellt.
Was kann ich dagegen tun?

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

16.806 Beiträge seit 2008
vor 5 Jahren

Das richtige Encoding angeben.

Siehe Dokumentation zu File.ReadAllText Method
Aber nein, man kann das Encoding nicht automatisch sicher erkennen.

PS: [Tipp] Anfängerhinweis == true / == false

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

Hallo Abt,

Danke für Deine Antwort.
Das Encoding selbst festzulegen hatte ich schon versucht:


edtEditor.Text = File.ReadAllText(vOpenFileDialog.FileName,Encoding.UTF8);

Die Umlaute werden trotzdem falsch dargestellt.

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

16.806 Beiträge seit 2008
vor 5 Jahren

Dann ist es das falsche Encoding.

Oft kommt das "falsche Encoding" von Windows 1252.
Dafür gibt es aber kein ENum; bekommt man aber über den Identifier.

Encoding wind1252 = Encoding.GetEncoding(1252);

Welches Encoding Du brauchst, das wissen wir aber auch nicht.

T
2.219 Beiträge seit 2008
vor 5 Jahren

Ohne Encoding Angabe bei den Read Methoden wird i.d.R. UTF-8 oder UTF-8 ohne BOM verwendet.
Vermutlich wurde die Datei mit dem Default Windows Encoding erstellt.
Dafür kannst du mit Encoding.Default deine System Einstellung verwenden, ist bei den meisten System in DE noch mit CodePage 1252 eingerichtet.
Alternativ musst du dir sonst eine Instanz via Encoding.GetEncoding und der CodePage erstellen.

Hilfreicher wäre es , wenn ihr euch auf einen Satz abstimmt, damit es nicht zu diesem Problem kommt.
.NET Versucht das Encoding nach gängiger Praxis zu setzen, wenn es keine Angaben gibt.
Leider bieten Textdateien keine Angaben zum eigentlichen Encoding, weshalb ein falsches Encoding so auch nicht einfach erkannt werden kann.

Links:
https://docs.microsoft.com/de-de/dotnet/api/system.text.encoding.default?view=netframework-4.7.2
https://docs.microsoft.com/de-de/dotnet/api/system.text.encoding.getencoding?view=netframework-4.7.2

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.806 Beiträge seit 2008
vor 5 Jahren

Ohne Encoding Angabe bei den Read Methoden wird i.d.R. UTF-8 oder UTF-8 ohne BOM verwendet.

Das ist nicht korrekt.

Wird nichts angegeben, dann wird Encoding.Default verwendet.
Das _kann _pro System jedoch völlig anders sein.

In .NET Framework i.d.R. ANSI das Default, und in .NET Core UTF 8.

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

Ohne Encoding Angabe bei den Read Methoden wird i.d.R. UTF-8 oder UTF-
Dafür kannst du mit Encoding.Default deine System Einstellung verwenden

Du Held!
So geht es :


edtEditor.Text = File.ReadAllText(vOpenFileDialog.FileName,Encoding.Default);

Danke!

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

T
2.219 Beiträge seit 2008
vor 5 Jahren

@Abt
Laut Referenz Code von .NET 4.7.2 verwendet man Encoding.UTF8
Ich beziehe mich aber nur auf .NET 4.7, nicht auf .NET Core.

Links:
https://referencesource.microsoft.com/#mscorlib/system/io/file.cs,8a84c56a62fd8d45
https://referencesource.microsoft.com/#mscorlib/system/io/file.cs,8d10107b7a92c5c2

@marlem
Freut mich, dass wir helfen konnten 😃
Für euch wäre auch Notepad++ o.ä. Editoren mit Anzeige des Encoding hilfreich.
Diese bieten auch i.d.R. eine Option für das Encoding bei neuen Dateien.
Dort habe ich bei mit immer UTF-8 drin, damit es eben nicht zu diesem Encoding Problemen kommt.
Natürlich bringt dies nur was, wenn man darauf Einfluss nehmen kann.
Bei externen Dateien muss man ggf. wieder das Encoding manuell prüfen und setzen.

Nachtrag:
@Abt
In .NET Core wird auch UTF-8 verwendet.
Hab mal den Code für die File Klasse gesucht und dort ist es identisch.

Link:
https://github.com/dotnet/corefx/blob/master/src/System.IO.FileSystem/src/System/IO/File.cs

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.806 Beiträge seit 2008
vor 5 Jahren

Ich beziehe mich aber nur auf .NET 4.7, nicht auf .NET Core.

Dann erwähne das auch - denn in der pauschalen Form ist sie falsch.

Laut Referenz Code von .NET 4.7.2 verwendet man Encoding.UTF8

Interessant. Dann ist das in der Dokumentation (noch) falsch.

In .NET Core wird auch UTF-8 verwendet.

Les mal genau, was ich geschrieben habe:

In .NET Framework i.d.R. ANSI das Default, und in .NET Core UTF 8.

Bezieht sich damit eindeutig auf meinen Satz bzgl. Encoding.Default.

T
2.219 Beiträge seit 2008
vor 5 Jahren

@Abt
Hast Recht.
Ich hatte es beim lesen so verstanden als würdest du dich auf den Encoding Parameter für die Read Methoden beziehen und nicht das Verhalten von Encoding.Default.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.