Heute gibt es mal wieder einen kurzen Artikel zu unserer Reihe „Hilfreiche Funktionen in C# .NET„. Mit dem folgenden Codeschnipsel kann man relativ einfach die Codepage einer beliebigen Datei auslesen. Anhand der ersten 4 Bytes wird geprüft, wie das BOM (Byte Order Mark) gesetzt ist.Ich benutze diesen Schnipsel recht häufig, um Fehler beim Auslesen von HTML-Templates vorzubeugen. Will man hier nämlich UTF8 anzeigen und hat das Template nicht im UTF8-Format abgespeichert, gibt es meist Probleme mit Umlauten und anderen Sonderzeichen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
/// <summary> /// Determines a text file's encoding by analyzing its byte order mark (BOM). /// Defaults to ASCII when detection of the text file's endianness fails. /// </summary> /// <param name="filename">The text file to analyze.</param> /// <returns>The detected encoding.</returns> public static Encoding GetFileEncoding(string filename) { // Read the BOM var bom = new byte[4]; using (var file = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read)) { file.Read(bom, 0, 4); } // Analyze the BOM if (bom[0] == 0x2b && bom[1] == 0x2f && bom[2] == 0x76) { return Encoding.UTF7; } if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf) { return Encoding.UTF8; } if (bom[0] == 0xff && bom[1] == 0xfe) { return Encoding.Unicode; } if (bom[0] == 0xfe && bom[1] == 0xff) { return Encoding.BigEndianUnicode; } if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff) { return Encoding.UTF32; } return Encoding.ASCII; } |
Für Fragen und Anregungen stehen wir natürlich zur Verfügung. Einfach einen Kommentar hinterlassen.