myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Eine Textdatei mit korrektem Encoding in einer Textbox anzeigen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Eine Textdatei mit korrektem Encoding in einer Textbox anzeigen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
marlem marlem ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.08.2018
Beiträge: 66
Entwicklungsumgebung: Visual Studio Community 2017
Herkunft: Reutlingen


marlem ist offline

Eine Textdatei mit korrektem Encoding in einer Textbox anzeigen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

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

C#-Code:
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?
28.02.2019 11:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.170
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
28.02.2019 11:21 Beiträge des Benutzers | zu Buddylist hinzufügen
marlem marlem ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.08.2018
Beiträge: 66
Entwicklungsumgebung: Visual Studio Community 2017
Herkunft: Reutlingen

Themenstarter Thema begonnen von marlem

marlem ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Abt,

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

C#-Code:
edtEditor.Text = File.ReadAllText(vOpenFileDialog.FileName,Encoding.UTF8);

Die Umlaute werden trotzdem falsch dargestellt.
28.02.2019 11:41 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.170
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.

C#-Code:
Encoding wind1252 = Encoding.GetEncoding(1252);

Welches Encoding Du brauchst, das wissen wir aber auch nicht.
28.02.2019 11:41 Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.350
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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/...framework-4.7.2
 https://docs.microsoft.com/de-de/dotnet/...framework-4.7.2

T-Virus
28.02.2019 11:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.170
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von T-Virus:
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.
28.02.2019 11:49 Beiträge des Benutzers | zu Buddylist hinzufügen
marlem marlem ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.08.2018
Beiträge: 66
Entwicklungsumgebung: Visual Studio Community 2017
Herkunft: Reutlingen

Themenstarter Thema begonnen von marlem

marlem ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von T-Virus:
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 :

C#-Code:
edtEditor.Text = File.ReadAllText(vOpenFileDialog.FileName,Encoding.Default);

Danke!
28.02.2019 11:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.350
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@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/#m...a84c56a62fd8d45
 https://referencesource.microsoft.com/#m...d10107b7a92c5c2


@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/ma...stem/IO/File.cs

T-Virus

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am 28.02.2019 12:11.

28.02.2019 12:04 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.170
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von T-Virus:
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.

Zitat von T-Virus:
Laut Referenz Code von .NET 4.7.2 verwendet man Encoding.UTF8

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

Zitat von T-Virus:
In .NET Core wird auch UTF-8 verwendet.

Les mal genau, was ich geschrieben habe:

Zitat von Abt:
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.
28.02.2019 12:13 Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.350
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@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
28.02.2019 19:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 8 Monate.
Der letzte Beitrag ist älter als 8 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 13.11.2019 16:41