Heim >Backend-Entwicklung >C++ >Wie lässt sich die Kodierung einer Datei mithilfe ihrer Byte Order Mark (BOM) zuverlässig bestimmen?

Wie lässt sich die Kodierung einer Datei mithilfe ihrer Byte Order Mark (BOM) zuverlässig bestimmen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-17 01:32:09426Durchsuche

How to Reliably Determine a File's Encoding Using its Byte Order Mark (BOM)?

Dateikodierung genau identifizieren: praktische Methoden

Die korrekte Identifizierung der Dateikodierung ist für die Textverarbeitung von entscheidender Bedeutung. Allerdings liefert das Attribut StreamReader.CurrentEncoding oft keine genauen Ergebnisse. Um dieses Problem zu lösen, besteht eine zuverlässigere Methode darin, die Byte Order Mark (BOM) der Datei zu analysieren.

Die Rolle der Stückliste

Die Stückliste ist eine Folge von Bytes, die die Endianness und Kodierung einer Textdatei angibt. Zu den gängigen Stücklisten gehören:

  • UTF-8:EF BB BF
  • UTF-16LE: FF FE
  • UTF-16BE:FE FF
  • UTF-32LE: FF FE 00 00
  • UTF-32BE: 00 00 FE FF
  • ASCII:Keine Stückliste

Bestimmen Sie die Dateikodierung basierend auf der Stückliste

Der folgende C#-Code bietet eine detaillierte Implementierung:

<code class="language-csharp">public static Encoding GetEncoding(string filename)
{
    // 读取 BOM
    byte[] bom = new byte[4];
    using (var file = new FileStream(filename, FileMode.Open, FileAccess.Read))
    {
        file.Read(bom, 0, 4);
    }

    // 分析 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 && bom[2] == 0 && bom[3] == 0) return Encoding.UTF32; //UTF-32LE
    if (bom[0] == 0xff && bom[1] == 0xfe) return Encoding.Unicode; //UTF-16LE
    if (bom[0] == 0xfe && bom[1] == 0xff) return Encoding.BigEndianUnicode; //UTF-16BE
    if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff) return new UTF32Encoding(true, true);  //UTF-32BE

    // 如果未检测到 BOM,则回退到 ASCII
    return Encoding.ASCII;
}</code>

Mit dieser Methode können Sie die Codierung jeder Textdatei genau identifizieren und so eine korrekte Dateninterpretation und Textverarbeitung sicherstellen.

Das obige ist der detaillierte Inhalt vonWie lässt sich die Kodierung einer Datei mithilfe ihrer Byte Order Mark (BOM) zuverlässig bestimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn