StreamReader problem - Unknown file encoding (western iso-88591)
-
21-08-2019 - |
Frage
Beim Lesen von Daten aus der Input-Datei habe ich gemerkt, dass die ¥ symbom wurde nicht gelesen von der StreamReader.Mozilla Firefox zeigte den Eingang Datei Typ wie Western (ISO-8859-1).
Nach dem spielen, um mit dem encoding-Parameter, fand ich es erfolgreich für die folgenden Werte:
System.Text.Encoding.GetEncoding(1252) // (western iso 88591)
System.Text.Encoding.Default
System.Text.Encoding.UTF7
Nun, ich bin der Planung über die Verwendung der "Default" - Einstellung, aber ich bin mir nicht ganz sicher, ob diese Entscheidung die richtige ist.Der vorhandene code nicht verwenden keine Kodierung und ich bin besorgt, dass ich vielleicht etwas zu brechen.
Ich weiß sehr wenig (BZW. gar nichts) über die Codierung.Wie mache ich das?Meine Entscheidung für die Verwendung von System.Text.Codierung.Standard sicher?Sollte ich werden Fragen die Benutzer zu speichern die Dateien in einem bestimmten format ?
Lösung
Codepage 1252 ist nicht ganz das gleiche wie ISO-Latin-1. Wenn Sie ISO-Latin-1, verwenden Sie Encoding.GetEncoding(28591)
. Allerdings würde ich erwarten, dass sie die gleichen für diesen Codepunkt (U + 00A5) sein. UTF-7 ist ganz anders (und fast nie, was Sie verwenden möchten).
Encoding.Default
ist nicht sicher - es ist eine wirklich schlechte Idee in den meisten Situationen. Es ist spezifisch für den jeweiligen Computer Sie laufen auf. Wenn Sie übertragen eine Datei von einem Computer zum anderen, die, was die ursprüngliche Computer codiert, weiß wurde mit?
Wenn Sie wissen, dass Ihre Datei in ISO-8859-1 ist, dann ausdrücklich, dass verwenden. Was ist die Herstellung dieser Dateien? Wenn sie nur durch den Benutzer gespeichert werden, welches Programm werden sie gespeichert in? Wenn UTF-8 ist eine Option, das ist ein guter -. Teil, weil es mit dem gesamten Unicode zu bewältigen
Ich habe eine Artikel auf Unicode und eine andere auf Debuggen Unicode Probleme denen Sie nützlich sein können.
Andere Tipps
Der vorhandene code nicht jede Codierung
Es kann nicht explizit angegeben ist die Kodierung, in welchem Fall die Codierung wahrscheinlich standardmäßig auf Codierung.UTF8.
Der name Codierung.Standardmäßig kann der Eindruck entstehen, dass dies die Standard-Codierung verwendet, die von Klassen wie StreamReader, aber das ist nicht der Fall:Wie Jon Skeet darauf hingewiesen, Kodierung.Standardmäßig ist die Codierung, die dem Betriebssystem der aktuellen ANSI-Codepage.
Ich persönlich denke, das macht den Namen der Eigenschaft Encoding.Standard etwas irreführend.
Sind Sie ein Software-Entwickler? vergessen Sie nicht, Joel Spolsky zu lesen Das absolute Minimum Jeder Software-Entwickler absolut positiv wissen müssen über Unicode und Zeichensätze (No Excuses !)