Wie konvertiere ich von einer möglicherweise Windows-1252 'ANSI' codiert hochgeladen-Datei zu UTF8 in .NET?
Habe ich eine FileUpload
- Steuerung in einer ASP.NET web-Seite, die verwendet wird, um eine Datei hochzuladen, wird der Inhalt (im stream) verarbeitet werden, in der C# - code-behind-und Ausgabe auf der Seite später, mit HtmlEncode
.
Aber einige dieser Ausgang wird immer entstellt sind, insbesondere dem symbol '£' ist eine Ausgabe als Unicode-FFFD REPLACEMENT CHARACTER. Ich habe verfolgt diese nach unten, um die input-Datei, die in Windows-1252 ('ANSI') codiert.
Die Frage ist,
-
Wie kann ich feststellen, ob die Datei codiert ist 1252 oder UTF-8? Es könnte sein, entweder, und
-
Wie kann ich es konvertieren zu UTF8, wenn es in Windows-1252, Erhalt das symbol £, etc?
Habe ich online geschaut, aber finde keine befriedigende Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wissen, dass die Datei verschlüsselt mit Windows-1252, können Sie öffnen Sie die Datei mit einem StreamReader und übergeben Sie die richtige Codierung. Das heißt:
Den "wahren" erzählt er die Codierung auf der Grundlage der byte order Mark am Anfang der Datei, wenn Sie da sind. Ansonsten öffnet es als Windows-1252.
Können Sie dann die Datei Lesen und, wenn Sie wollen konvertieren zu UTF-8 schreiben in eine Datei, die Sie geöffnet haben, mit, dass endcoding.
Die kurze Antwort auf Ihre erste Frage ist, dass es nicht 100% zufriedenstellend) bestimmen Sie die Codierung einer Datei. Wenn byte order marks, können Sie bestimmen, was Geschmack von Unicode ist es, aber ohne Stückliste, sind Sie stecken mit der Verwendung von Heuristiken bestimmt die Codierung.
Habe ich nicht eine gute Referenz für die Heuristiken. Sie könnten Suche für "wie funktioniert die Editor bestimmen Sie den Zeichensatz". Ich erinnere mich, etwas, dass vor einiger Zeit.
In der Praxis, die ich gefunden habe, die folgenden arbeiten für die meisten von dem, was ich Tue:
Meisten Dateien, die ich lese, sind diejenigen, die ich mit erstellen .NET StreamWriter, und Sie sind in UTF-8 mit BOM. Andere Dateien, die ich bekomme sind in der Regel geschrieben, mit einigen Tools, die nicht verstehen, Unicode-oder code-Seiten, und ich kann nur behandeln es als ein Strom von bytes, die Codierung.Standardmäßig tut gut.