Maison > développement back-end > C++ > Comment puis-je déterminer par programme l'encodage d'un fichier texte avec précision ?

Comment puis-je déterminer par programme l'encodage d'un fichier texte avec précision ?

Mary-Kate Olsen
Libérer: 2025-01-17 01:51:09
original
347 Les gens l'ont consulté

How Can I Programmatically Determine a Text File's Encoding with Precision?

Identifier avec précision l'encodage des fichiers texte

Déterminer l'encodage d'un fichier texte peut être délicat, surtout si vous n'êtes pas familier avec les concepts d'encodage. Cet article présentera une méthode fiable avec une précision comparable à celle du Bloc-notes.

Le rôle de la marque d'ordre des octets (BOM)

Byte Order Mark (BOM) Une séquence d'octets située au début d'un fichier texte qui indique comment le fichier est codé. Les détails sont les suivants :

  • UTF-7 :2b 2f 76
  • UTF-8 : ef bb bf
  • UTF-32 (LE) :ff fe 00 00
  • UTF-16 (LE):ff fe
  • UTF-16 (BE) : fe ff
  • UTF-32 (BE) :00 00 fe ff

Exemple de code

Traduire les connaissances ci-dessus en code :

<code class="language-csharp">/// <summary>
/// 通过分析字节顺序标记 (BOM) 来确定文本文件的编码方式。
/// 如果无法检测文本文件的字节序,则默认为 ASCII。
/// </summary>
/// <param name="filename">要分析的文本文件。</param>
/// <returns>检测到的编码。</returns>
public static Encoding GetEncoding(string filename)
{
    // 读取 BOM
    var 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

    // 如果编码检测失败,则默认为 ASCII
    return Encoding.ASCII;
}</code>
Copier après la connexion

Avec ces outils, vous pouvez désormais déterminer l'encodage de n'importe quel fichier texte avec la confiance d'un pro.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal